首先我們來看3行**:
1int *a[10];2
int (*a)[10];3
int a[10];
3行**其實還是比較接近的,但是意義卻是不一樣的。
1、a表示的是由int *型別組成的陣列,這個陣列的長度為10;
2、a表示的是a是指向由10個int組成的陣列型別的指標;
3、a表示的是由10個int組成的陣列。
從以上的說明當中,我們可以認為比*的優先順序要高,因此當型別會先跟組合,然後再與*組合。
int a[10];int (*pa)[10] = &a;
a是乙個陣列,現在使用&a將陣列a的首位址複製給pa,其實&a的數值等於&a[0],但是要注意2種型別是不相同的,&a[0]表示的是int *型別,而&a則表示的是int (*)[10]型別;因此*pa則表示pa指向的陣列a,因此對於第乙個元素的取值可以表示為(*pa)[0];從上一章的學習中,我們注意到可以將*pa寫成pa[0],因此獲取第乙個元素的表示式可以改寫為pa[0][0],這樣的表示方法很像乙個多維陣列。
int a[5][10];int (*pa)[10] = &a[0];
當a視為一維陣列的時候,共有5個元素,每乙個又是乙個含有10個int元素的一維陣列。a[i]分別包含a[i][0]、a[i][1]、a[i][2]...a[i][9] 10個元素。則a[i]表示為二維陣列每行的首位址,a為二維陣列的首位址,也是a[0]的首位址。a + i為a[i]的首位址,即:a[i] = *(a + i)。由上面的結論我們可以得出:pa[0] = a[0]。因此如果我們要尋找多維陣列a[i][j]的位址,則得到如下表示式:*(a + i) + j;由於我們將多維陣列視為一維陣列,以為陣列的長度為n,則獲取a[i][j]的位址表示式為:*(pa + i * n + j)。
C C學習筆記
1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...
C,C 學習筆記
1.求a的n次方 標頭檔案pow a,n a,n都為double 2.關於指標的一些小測試 includeusing namespace std int main int a 8 int m 3 cout 3.sort位於 algorithm 中,sort p,p n 預設公升序排列。4.inclu...
學習筆記8
1.vim的三種模式 命令模式插入模式退出模式 2.進入insert模式的方法 i 游標所在位置插入 i 游標所在行首插入 a 游標所在字元的下一位插入 a 游標所在行的行首插入 o 游標所在行的下一行插入 o 游標所在行的上一行插入 3.在退出模式中 wq退出並儲存 wq 強行退出儲存 q在沒有修...