看程序:數組
我恐怕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); ———>*【地址】就是去除該地址的值。