C語言學習筆記 陣列引數和指標引數

2022-06-25 21:18:11 字數 1254 閱讀 3725

(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...