《expert c programming》中花了兩篇寫了陣列與指標,這裡將其中的乙個圖記錄一下,也算是平時程式設計稍不注意就會產生bug的地方。
不同點:
1.宣告的時候,如extern char a,不能改寫成指標的形式;
2.定義的時候,如char a[10],不能改寫成指標的形式;
相同點:
1.函式的引數,可以是func(char a),也可以是func(char * a),因為陣列名被編譯器當作指向該陣列第乙個元素的指標;
2.表示式中,可以是c = a[i]; 也可以是 c = *(a + i);陣列的下標總是與指標的偏移量相同。
下面可以看一則多維陣列和指標的表示:
int i, j, k;
int n = 0;
int ap[2][3][4];
for(i = 0; i < 2; i++)}}
int (*r)[4] = ap[0];
for(j = 0; j < 3; j++)
printf("\n");
}int *p;
for(j = 0;j < 3; j++, r)
printf("\n");
}還有一點,在c語言中,不能向函式傳遞乙個普通的多維陣列,如下:
void func(int a[2][3]);
下面的可以呼叫:
int a[2][2][3]; func(a);
int a[99][2][3]; func(a);
但下面的不行:
int a[2][3][3]; func(a);
int a[99][8][8]; func(a);
因為傳遞乙個多維陣列,必須提供除了最左邊一維以外的所有維的長度,這樣就限制了把實參設定為除了最左邊一維外所有維都必須和形參相匹配的陣列。
多維陣列的初始化:
int r1 = ; // -1 是º行結束的標識
int r2 = ;
int r3 = ;
int *w = ,,*/
r1,r2,
r3};
for(i = 0; i < 3; i++)
printf("\n");
}使用指標從函式返回乙個陣列,想必這個應該很少用到吧
//paf是乙個函式,指向乙個包含20個int元素的陣列的指標
int (*paf())[20]
int mian()
int (*pa)[20] = paf();
if(pa)
printf("\n");
}return 0;
陣列 指標雜記
一維陣列 一維陣列例如 int a 5 陣列實際上是一種構造型別,是記憶體的一段連續的儲存區域。其中int指明了記憶體訪問方式,包括元素的型別,每次跳躍的步長 其中5指明了構造型別中資料元素的個數,也就是說指明了陣列訪問時候的可偏移的範圍 其中a有兩重含義 1 作為陣列名,a表示一種構造資料型別,這...
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
指標陣列與陣列指標
1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...