深入解剖c 书中的两个指针题目
一:
int main()
{
char a[5]={'A','B','C','D
char (*p3)[3] = &a;
char (*p4)[3] = a;
return 0;
}
二:
int main()
{
char a[5]={'A','B','C','D'};
char (*p3)[10] = &a;
char (*p4)[10] = a;
return 0;
}
这两种会有什么样的问题?p3+1和 p4+1的值又是多少?
求高手解答下,小弟确实不懂
[解决办法]
&a与a值一样,但是意义不一样,a就是第一个元素的地址,a+1=&a[1],
而&a是数组地址,&a+1加的是整个数组长度。
而p3和p4都是指针,它们的类型长度为3或者10
int main(){char a[5]={'A','B','C','D'};char (*p3)[3] = &a;//p3+1后,p3指向元素'D'char (*p4)[3] = a;//p4+1后,p4同样指向'D'return 0;}int main(){char a[5]={'A','B','C','D'};char (*p3)[10] = &a;//p3+1后,p3指针值加10,具体是什么不确定char (*p4)[10] = a;return 0;}
[解决办法]
Google: 数组指针. 顺便可以看看指针数组!
&a 和 a 没区别的! 两个代表的意思都是数组首元素的地址!
而 (p3+1/p4+1), 对于第一个来说就是这样的: p3 + sizeof(*p3) // 别写成 sizeof(p3), 因为 32 位环境下指针固定大小就是 4 字节, 这里sizeof(*p3) == 3. p4同理.