(1)c 語言中只會以值拷貝的方式傳遞引數,當向函式傳遞陣列時,將整個陣列拷貝乙份傳入函式導致執行效率低下,c 語言以高效作是最初的設計目標,所以這種方法是不可取的。
(2)引數位於棧上,太大的陣列拷貝將導致棧溢位。
(3)將陣列名看做常量指標,傳遞的是陣列的首元素位址,而不是整個陣列。
(1)二維陣列引數同樣存在退化的問題:
二維陣列可以看做是一維陣列,其中的每個元素又是乙個一維陣列
(2)二維數維引數中第一維的引數可以省略
①void f(int a[5])←→void f(int a)←→void f(int* a)
②void g(int a[5][3])←→void g(int a[3])←→void g(int (*a)[3]);
(3)等價關係
陣列引數
等效的指標引數
備註一維陣列:float a[5]
指標:float* a
相當於陣列去掉第1維,然後把陣列名前加上*。
指標陣列:int* a[5]
指標的指標:int** a;
二維陣列:char a[3][4]
陣列的指標:char(*a)[4]
(4)被忽視的知識點
①c 語言中無法向乙個傳遞任意多維陣列。換一句話講,形參 int a[3]是合法的,但 inta是非法的。
①因此,必須提供除第 1 維之外的所有其他維長度。第一維之外的維度資訊用於完成指標運算。
傳遞與訪問二維陣列
#include void access(int a[3],int row) //a[3],形參第2維的長度必須提供
printf("\n
");}void access_ex(int b[2][3],int n) //
陣列引數的第2、3維長度必須提供
printf("\n
");}int
main()
,,};
int aa[2][2] = ;
int b[1][2][3] = ;
access(a, 3);
//access(aa,2);
//error,int(*)[2]與int (*)[3]型別不匹配
access_ex(b, 1);
//access_ex(aa,2);
//int(*)[2]與int(*)[2][3]型別不匹配
return0;
}
參考資料:
www.dt4sw.com
C語言學習筆記 陣列指標域指標陣列
一 指標陣列和陣列指標的記憶體布局 初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔 4 個位元組,至於它指向的...
C語言學習筆記 陣列 指標和結構 1
1 使用聯合節省記憶體資源 a 不使用聯合 struct empdates last day 儲存結構如下表示 int days works int month int day int year b 使用聯合 union empdates last day 使用聯合之後的儲存結構 int month...
C語言學習筆記《陣列》
1,已知陣列x有5個元素,精組y有6個元素.請分別對x和y排序。輸出x和y排序後的元素 include main y 6 int i,j,sum 0 for i 0 i 4 i int i,j,sum for i 0 i 9 i for i 0 i 9 i printf d t a i code c...