有 int p[3][4];
這裡 p,p+1,p+2都是對等的 如果求(p+1-p)會是多少?答案應該是1。
但是如果*(p+1)-*p,答案是4;
p是指向陣列的指標,*p是指向int型的指標,如果你cout<
*(&p[0][0]+5): &p[0][0] 是乙個指向int的指標,跳5個int長度再取值;=p[1][1];
*(*(p+1)+1) : p+1是乙個陣列指標,*(p+1)變成int指標,跳乙個,再取值;=p[1][1];
*(&p[1]+1):p[1]相當於*(p+1)是乙個int指標,再取&,相當於退化到陣列指標,
即&p[1]=&*(p+1)=p+1,*(&p[1]+1) =*(p+1+1)=*(p+2),這裡是乙個int指標,指向的數值為p[2][0];即**(p+2)就是p[2][0];
實際上,如果我直接定義p[2][3], 與我在堆上申請 int *p[2];p[0]=new int[3];p[1]=new int[3]是有區別的,p+1的值與*(p+1)列印出來是不一樣的;前面是存放位址,後面是該位址上的內容。直接定義的那個因為與編譯器相關,p+1,*(p+1)你列印出來是一樣的,但是性質不一樣,前面是指向的陣列,後面是指向的int,因而編譯器讓他們執行一跳的步長也是不同的;
關於陣列指標的一道面試題
看下面一道面試題 include include int main void int ptr int a 1 printf d,d a 1 ptr 1 return 0 輸出結果為 2,5 在這裡主要是考察 a 1 和 a 1的區別了。很顯然 a 1 取的是a 1 然而 a 1取的是什麼呢?a不是首...
關於C陣列指標的一道面試題
本文由 lonelyrains c語言指標是經典問題了,還是做錯啊 int main int p int a 1 a陣列的位址加1,是以a陣列的大小為乙個單位 char pc1 char a 1 同上,只是pc1變成了字元指標,下次pc1加減運算是乙個位元組大小為乙個單位 char pc2 char...
一道面試題
一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...