首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

深入解剖c 书中的两个指针题目解决思路

2012-04-07 
深入解剖c 书中的两个指针题目一:int main(){char a[5]{A,B,C,Dchar (*p3)[3] &achar (*p4)[3]

深入解剖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

C/C++ code
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), 对于第一个来说就是这样的:
C/C++ code
p3 + sizeof(*p3) // 别写成 sizeof(p3), 因为 32 位环境下指针固定大小就是 4 字节, 这里sizeof(*p3) == 3.  p4同理. 

热点排行
Bad Request.