关于数组和指针的一些操作

首先需要知道的是:对指针进行加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代表数组首元素地址。虽然他们指向的地址是一样的,但代表的意义并不一样。


分享到:


相關文章: