|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
若定义 char s[2][3]={“ab”, “cd”}, *p=(char *)s; 那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是
A.
*(p+4)
B.
*(p+3)
C.
*s+2
D.
p[1][1]
问题1:正确答案是A,但是D为什么不对呢?
问题2:如果这样定义char s[2][3]={“ab”, “cd”}, *p=(char *)s; 和 char s[2][3]={“ab”, “cd”}, *p=&s;等价吗?
是的,这两个定义是等价的。在这两种情况下,字符指针 p 都指向了二维字符数组 s 的第一个元素,即 s[0][0]。
定义1:
- char s[2][3] = {"ab", "cd"};
- char *p = (char *)s;
复制代码
定义2:
- char s[2][3] = {"ab", "cd"};
- char *p = s;
复制代码
在两种情况下,字符指针 p 都被初始化为指向 s 的首地址。在C语言中,数组名(在这里是 s)在大多数上下文中被视为指向其第一个元素的指针。因此,在定义2中,将 s 赋值给 p 会使 p 指向 s[0][0]。这与定义1中将数组地址强制转换为字符指针的结果相同。
|
|