由a+1與*(a+1)想到的取地址與取值問題

看程序:數組


我恐怕a+1與*(a+1)在二維數組的某些特殊性質(好比一位數組的a+1只表示a的第1號元素地址,二維數組中表示第1行的首地址,結果是同一個地址)指針

引發的,故代碼中改成了a+2,此數組爲3X4數組。編譯


能夠看到a+2與*(a+2)的地址是徹底同樣的,輸出這個地址的值,獲得的是17,即第三行的首元素。程序

因此在二維數組中一個下標的表示仍是各個首地址。im


那麼爲何a+2和*(a+2)表示的是同一個地址呢?*(a+2)不該該是內容嗎??二維數組

我猜測:img

指針的定義形如:int *p;co

而在程序編譯時對數組名師按首地址處理的,即a就是數組a的首地址,那麼a+2就是第二行的首地址了(二維數組)。printf

又問,那麼*(a+2)呢?

首先看a,在程序處理時就做爲*a來處理的,加*的話就是地址處理??那麼說a+2處理時就是做爲*(a+2),就是【地址】來處理的。

又問關於指針,指針的*P時不是取值麼?

對啊,可是定義的時候是int *p的,這時候就是已經按照地址來處理的。


取值如何取??雙星。

好比在直接調用指針 

printf("%d「,*p);

這時候由於已知p爲指針,即地址量,至關於*【地址】。

比較:

 cout<<a+2<<endl;                      ———>數組名內部轉換成地址     cout<<*(a+2)<<endl;               ———>輸出的就是a+2的地址     cout<<**(a+2);                         ———>*【地址】就是去除該地址的值。

相關文章
相關標籤/搜索