關於數組和指針的一些操作

首先需要知道的是:對指針進行加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代表數組首元素地址。雖然他們指向的地址是一樣的,但代表的意義並不一樣。


分享到:


相關文章: