设“char s[10];*p=s”以下不正确的表达式是()
A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*(p+1)=s[0];
A. p = s + 5;
这个表达式将使 p 指向 s 数组中的第6个元素(因为索引是从0开始的)。这是有效的,只要确保没有超出数组的界限即可。
B. s = p + s;
这个表达式是无效的,因为 s 是一个数组名,在 C 语言中,它实际上是一个常量指针,指向数组的第一个元素,你不能给数组名赋值一个新的地址。此外,即使 s 被认为是指针,将一个指针加上一个数组是没有意义的。
C. s[2] = p[4];
如果 p 指向了 s 或者与 s 相关的部分,并且偏移不会导致访问越界,那么这个表达式是合法的。它将 p 指向位置的第5个元素的值赋给 s 的第3个元素。
D. *(p + 1) = s[0];
如果 p 指向了 s 或者与 s 相关的部分,那么这个表达式也是合法的。它将 s 的第1个元素的值赋给了 p 后移一位所指向的位置。
综上所述,选项 B. s = p + s; 是不正确的表达式。
D不是越界了吗?
【答案】:B
【解析】:因为...
用户登录可进行刷题及查看答案
【解析】:因为s是数组名,只代表数组的首地址,数组名也被成为指针变量,其值是不可改变的。所以不能给s赋其他值。
登录后提交答案