单选题
1、〖第1题〗543) 若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则输出结果不为5
A
printf(”%d”,*(a+5));
B
printf(”%d”,p[5]);
C
printf(”%d”,*(p+5));
D
printf(”%d”,*p[5]);
答案解析
正确答案:D
解析:
这是一道关于 C 语言中**数组、指针与运算符优先级**的经典题目。我们需要分析每个选项的表达式的含义,判断其输出值是否为 5。
### 1. 题目背景分析
* **定义**:`int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};`
* 数组 `a` 的下标从 0 到 9。
* `a[0]=0`, `a[1]=1`, ..., `a[5]=5`, ...
* **指针**:`*p = a;`
* 指针 `p` 指向数组 `a` 的首元素,即 `p` 等价于 `&a[0]`。
* 因此,`p[i]` 等价于 `*(p+i)`,也等价于 `a[i]`。
### 2. 逐项解析
#### A. `printf("%d", *(a+5));`
* **分析**:
* 在 C 语言中,数组名 `a` 在表达式中通常退化为指向首元素的指针。
* `a + 5` 表示指向数组第 6 个元素(下标为 5)的地址,即 `&a[5]`。
* `*(a + 5)` 对该地址解引用,取出该位置的值,即 `a[5]`。
* **结果**:`a[5]` 的值为 **5**。
* **结论**:输出为 5。
#### B. `printf("%d", p[5]);`
* **分析**:
* `p` 是指向数组首元素的指针。
* 根据指针运算规则,`p[5]` 完全等价于 `*(p + 5)`。
* 因为 `p` 指向 `a`,所以 `p[5]` 等价于 `a[5]`。
* **结果**:`a[5]` 的值为 **5**。
* **结论**:输出为 5。
#### C. `printf("%d", *(p+5));`
* **分析**:
* `p + 5` 计算出指向下标为 5 的元素的地址。
* `*(p + 5)` 对该地址解引用,获取该位置的值。
* 这同样等价于 `a[5]` 或 `p[5]`。
* **结果**:`a[5]` 的值为 **5**。
* **结论**:输出为 5。
#### D. `printf("%d", *p[5]);`
* **分析**:
* 这里涉及**运算符优先级**的问题。
* 下标运算符 `[]` 的优先级 **高于** 间接寻址运算符(解引用)`*`。
* 因此,表达式 `*p[5]` 会被编译器解析为 `*(p[5])`。
* 第一步:计算 `p[5]`。如前所述,`p[5]` 的值是整数 **5**(即 `a[5]` 的值)。
* 第二步:执行 `*5`。试图对整数常量 `5` 进行解引用操作。
* **错误原因**:
* `*` 运算符的操作数必须是一个**指针类型**(地址)。
* 而 `p[5]` 的结果是一个 `int` 类型的值(5),不是地址。
* 这在 C 语言中是**语法错误**(编译错误),或者如果强制转换后运行会导致非法内存访问(段错误)。它绝对无法正确输出整数 5。
* **结论**:该表达式非法或行为未定义,**输出结果不为 5**(甚至无法正常运行)。
### 3. 最终结论
题目要求选出**输出结果不为 5** 的选项。
* A、B、C 三个选项均正确访问了数组元素 `a[5]`,输出均为 5。
* D 选项因运算符优先级导致语义错误(试图解引用一个整数值),不符合题意中的正常输出逻辑。
因此,正确答案是 **D**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第298题 (1.0分) 题号:537 在定义构造数据类型时,不能()。
单选题
1、第297题 (1.0分) 题号:525 C语言中不可以嵌套的是()。
单选题
1、第296题 (1.0分) 题号:626 若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达 式的值为”假”,则以下不能满足要求的表达式是()。
单选题
1、第295题 (1.0分) 题号:96 下列字符序列中,不可用作C语言标识符的是()。
单选题
1、第294题 (1.0分) 题号:165 下列定义数组的语句中正确的是()。
单选题
1、第293题 (1.0分) 题号:685 在位运算中,操作数每左移一位,其结果相当于()。
单选题
1、第292题 (1.0分) 题号:529 在C语言中,调用函数除函数名外,还必须有()。
单选题
1、第291题 (1.0分) 题号:574 若变量已正确定义并赋值,下面符合C语言语法的表达式是()。
单选题
1、第290题 (1.0分) 题号:563 以下叙述中正确的是()。
单选题
1、第289题 (1.0分) 题号:538 位字段数据的单位是()位。
