欢迎大家来到IT世界,在知识的湖畔探索吧!
首先需要知道的是:对指针进行加1的操作,得到的是下一个元素的地址,而不是原有地址值直接加一。如一个类型为T的指针的移动,是以sizeof(T)为移动单位。
下面以具体程序进行分析:
1、&a+1 – &a为数组的首地址,所以此操作为数组首地址加上sizeof(a),即&a+sizeof(int),也就是下一个数组的首地址。
2、(int*)(&a+1) – 则是将上述获得的地址强制转化为int*型,并赋给ptr。
3、a+1 – a为数组首元素的地址,即a[0]的地址。则a+1为数组第二个元素的地址,即a[1]的地址。
4、*(a+1) – 由上可知*(a+1)即为a[1]。
5、*(ptr-1) – 由上述出程序,ptr指向下一数组的首元素,且ptr也为int*类型,所以*(ptr-1)为a[4]。
需要特别注意的是:&a代表数组地址,a代表数组首元素地址。虽然他们指向的地址是一样的,但代表的意义并不一样。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22504.html