A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wwpower 中级黑马   /  2015-11-27 22:02  /  1100 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如int arr[5] = {1,2,3,4,5};
int *p = &arr+1;
*(p-1) = ?
如果 int *p1 = arr+1;
*(p-1)=?
求大牛讲解一下。

5 个回复

倒序浏览
int *p=&arr+1;取的是第五个元素的地址,因为&arr是表示的是数组的地址,&arr+1就是数组的指针向高位跨一步,这一步就是数组的自解释
回复 使用道具 举报
本帖最后由 石油小硕 于 2015-11-28 00:56 编辑

&arr是数组的地址,步长为20个字节,+1表示向上移动20个字节,也就是移到了数组第5(数组元素从0开始)个元素(假设有的话)的位置,再减1,就是再向下移动4个字节,即移动到第4个,返回值为5;第二个,arr表示数组第0位元素的地址,加1移动到第1位元素,再减1返回到第0位,所以返回值为1;
回复 使用道具 举报 1 0
      int *p=&arr+1;取的是第五个元素的地址,因为&arr是表示的是数组的地址,&arr+1就是数组的地址向高位跨一步,这一步就是数组的字节数,数组有五个int类型的元素,所以数组的字节数为20个字节,所以数组要像高位跨20个字节。 那么&arr+1表示的就是在第五个元素之上的一个地址。所以*(p-1)表示的就是第五个元素之上的那个地址向后移动4个字节,刚好走到了第五个元素的空间里。。所以最后输出的结果是5.
    Int *P=arr+1,取的是第二个元素的地址,因为arr==&arr[0]..所以arr+1相当于第一个元素向前跨4个字节,
所以*(P-1)就是第二个元素向地位移动4个字节,最后结果就是1
回复 使用道具 举报
IPswhatb“is” 发表于 2015-11-28 01:01
int *p=&arr+1;取的是第五个元素的地址,因为&arr是表示的是数组的地址,&arr+1就是数组的地址向高位 ...

赞,学习了。
回复 使用道具 举报
石油小硕 发表于 2015-11-28 00:53
&arr是数组的地址,步长为20个字节,+1表示向上移动20个字节,也就是移到了数组第5(数组元素从0开始)个元 ...

谢谢,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马