指針數組、數組指針以及二維數組


先看一道題:

 1 #include <iostream>
 2 
 3 void main()
 4 {
 5     int n[][3] = {10,20,30,40,50,60};
 6     int (*p)[3];
 7     p=n;
 8     cout << p[0][0] << "," << *(p[0]+1) << "," << (*p)[2] <<endl;
 9     return 0;     
10 }

輸出結果為:10,20,30

上題考察的數組指針和二維數組之間的關系,其中n是一個2*3的二維數組,p是一個數組指針,數組指針是一個指針,指向一個數組。這里的p在(*p)中,說明p是一個指針,指針的類型是int(*)[3],指針所指向的類型為int[3],所以指針p指向一個長度為3的數組。

一開始p指向n的第0行,因為第0行就是一個長度為3的數組。p[0]表示第0行的首地址(即&n[0][0]),p[0]+1表示第0行首地址偏移一個地址,即n[0][1]的地址(&n[0][1])。所以*(p[0]+1) 為n[0][1],答案是20。

p==&p[0],表示第0行(因為下標從0開始),所以*p == p[0],表示第0行的首地址,所以(*p)[2] 為p[0][2],即n[0][2],答案是30。

 

總結:

直接在p上移動就是移動行,在*p上移動就是移動列。比如:**(p+1)等於p[1][0],*(*p+1)等於p[0][1]。

未完待續~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM