C 傳遞陣列的問題

2021-05-28 17:39:55 字數 1516 閱讀 6982

**

先看下面的**。

#include using namespace std;  

void testarrayarg(int a)

int main()

; cout << "in main..." << endl;

cout << "array address: " << a << endl;

cout << "array size: " << sizeof(a) << endl;

cout << "array element count: " << sizeof(a) / sizeof(a[0]) << endl;

testarrayarg(a);

cout << endl << "the 4th element's value: " << a[3] << endl;

return 0;

}

執行結果如下:

in main...

array address: 0012ff4c

array size: 20

array element count: 5

in func...

array address: 0012ff4c

array size: 4

array element count: 1

changing the 4th element's value to 10.

the 4th element's value: 10

當我們直接將陣列a作為引數呼叫testarrayarg()時,實參與形參的位址均是0012ff4c。並且,在testarrayarg()中將a[3]的值修改為10後,返回main()函式中,a[3]的值也已經改變。這些都說明c++中陣列作為函式引數是傳址

特別需要注意的是,在main()中,陣列的大小是可以確定的。

array size: 20

array element count: 5

但作為函式引數傳遞後,其大小資訊丟失,只剩下陣列中第乙個元素的資訊。

array size: 4

array element count: 1

這是因為c++實際上是將陣列作為指標來傳遞,而該指標指向陣列的第乙個元素。至於後面陣列在**結束,c++的函式傳遞機制並不負責。

上面的特性可總結為,陣列僅在定義其的域範圍內可確定大小

因此,如果在接受陣列引數的函式中訪問陣列的各個元素,需在定義陣列的域範圍將陣列大小作為另一輔助引數傳遞。則有另一函式定義如下:

void testarrayarg2(int a, int arraylength)  

可在main()中這樣呼叫:

testarrayarg2(a, sizeof(a) / sizeof(a[0]));

這樣,testarrayarg2()中便可安全地訪問陣列元素了。

C 中函式傳遞陣列的問題

本人目前在自學c 在學習結構體時碰到了乙個小問題,先來看問題 案例描述 設計乙個英雄的結構體,包括成員姓名,年齡,性別 建立結構體陣列,陣列中存放5名英雄。通過氣泡排序的演算法,將陣列中的英雄按照年齡進行公升序排序,最終列印排序後的結果。五名英雄資訊如下 下面是我第一次寫的 我在sort hero函...

C語言 陣列引數傳遞問題

陣列傳遞引數的話,如果直接傳指標過去。對陣列引數的操作會改變原始變數的值。如果不想影響原始變數的話,需要在函式裡面定義新的區域性陣列變數。賦值給區域性陣列變數,對區域性陣列變數進行操作。include include include int setarray char array int setar...

c語言 函式傳遞陣列問題

題目 定義乙個函式,使用二維陣列作為傳入引數,在主函式中輸入4 4的二維陣列,呼叫已定義的函式,把該矩陣傳入,在主函式中輸出結果。函式功能 使二維陣列中兩條對角線上的元素均為1,其餘元素均為0。解 include include intdiagonal assignment int a 4 4 el...