单选题
1、第194题 (1.0分) 题号:549 若有double *p,x[10];int i=5;使指针变量p指向元素x[5]的语句为()。
A
p=&x[i];
B
p=x;
C
p=x[i];
D
p=&(x+i)
答案解析
正确答案:A
解析:
**解析:**
本题考查的是 C 语言中指针与数组的关系以及指针的赋值操作。
1. **题目分析**:
* 已知条件:`double *p` 是一个指向 double 类型数据的指针变量;`x[10]` 是一个包含 10 个 double 类型元素的数组;`int i = 5`。
* 目标:使指针 `p` 指向数组元素 `x[5]`。这意味着 `p` 中存储的值应该是 `x[5]` 这个变量在内存中的地址。
2. **选项逐一分析**:
* **A. `p=&x[i];`**
* `x[i]` 即 `x[5]`,表示数组中的第 6 个元素(下标从 0 开始)。
* `&` 是取地址运算符。`&x[i]` 表示获取元素 `x[5]` 的地址。
* `p` 是指针变量,可以接收地址值。因此,`p = &x[5]` 正确地将 `p` 指向了 `x[5]`。
* **该选项正确。**
* **B. `p=x;`**
* 在 C 语言中,数组名 `x` 代表数组首元素 `x[0]` 的地址。
* 执行 `p = x;` 后,指针 `p` 将指向 `x[0]`,而不是 `x[5]`。
* **该选项错误。**
* **C. `p=x[i];`**
* `x[i]` 即 `x[5]`,它是一个 `double` 类型的数值(数据本身),而不是地址。
* `p` 是一个指针变量,只能存储地址。将一个 `double` 类型的值直接赋给指针变量会导致类型不匹配错误(编译错误或警告,且逻辑上完全错误)。
* **该选项错误。**
* **D. `p=&(x+i)`**
* `x` 是数组名,在表达式中退化为指向首元素的指针。
* `x + i` 是指针运算,结果是一个地址(即 `&x[5]` 的地址值),它本身已经是一个右值(地址)。
* `&(x+i)` 试图对一个表达式的结果(非左值)取地址,这在 C 语言中是非法的。我们不能对“地址的计算结果”再次取地址,只能对具体的变量或内存单元取地址。正确的写法应该是 `p = x + i;` 或者 `p = &x[i];`。
* **该选项语法错误。**
3. **结论**:
要使指针 `p` 指向 `x[5]`,需要获取 `x[5]` 的地址并赋给 `p`。只有选项 A 正确地使用了取地址运算符 `&` 作用于数组元素 `x[i]`。
**正确答案:A**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第65题 (1.0分) 题号:636 若二维数组a有m列,则在a[i][j]前的元素个数为()。
单选题
1、第64题 (1.0分) 题号:659 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。
单选题
1、第63题 (1.0分) 题号:524 与实际参数为实型数组名相对应的形式参数不可以定义为()。
单选题
1、第62题 (1.0分) 题号:570 以下叙述不正确的是()。
单选题
1、第61题 (1.0分) 题号:212 C语言中的文件类型只有()。
单选题
1、第60题 (1.0分) 题号:674 以下错误的描述是:函数调用可以()。
单选题
1、第59题 (1.0分) 题号:210 在位运算中,操作数每右移一位,其结果相当于()。
单选题
1、第58题 (1.0分) 题号:178 以下对C语言函数的描述中,正确的是()。
单选题
1、第57题 (1.0分) 题号:558 int a[10]={1,2,3,4,5,6,7,8};int *p;p=&a[5];p[-3]的值是()。
单选题
1、第56题 (1.0分) 题号:157 下列程序的输出结果是()。
