本文需要解決c++中關於陣列的2個問題:
1. 陣列作為函式引數,傳值還是傳址?
2. 函式引數中的陣列元素個數能否確定?
先看下面的**。
#include
using
namespace
std;
void
testarrayarg(
inta)
intmain()
; 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++的函式傳遞機制並不負責。
上面的特性可總結為,陣列僅在定義其的域範圍內可確定大小。
因此,如果在接受陣列引數的函式中訪問陣列的各個元素,需在定義陣列的域範圍將陣列大小作為另一輔助引數傳遞。則有另一函式定義如下:
[cpp]view plain
copy
void
testarrayarg2(
inta,
intarraylength)
可在main()中這樣呼叫:
testarrayarg2(a, sizeof(a) / sizeof(a[0]));
這樣,testarrayarg2()中便可安全地訪問陣列元素了。
C 陣列作為函式引數的幾個問題
本文需要解決c 中關於陣列的2個問題 1.陣列作為函式引數,傳值還是傳址?2.函式引數中的陣列元素個數能否確定?先看下面的 cpp view plain copy include using namespace std void testarrayarg inta intmain cout in m...
C語言陣列作為函式引數
一 陣列元素作為函式的實參 陣列元素就是變數,與普通變數沒有區別,將陣列元素傳送給形參,實現單向的值傳遞。include float max float x,float y int main int m a 0 for int i 1 i 6 i printf 陣列中的最大元素是 d m 二 陣列名...
陣列作為函式引數
一 一維陣列名作函式引數 用陣列名作函式引數,應該在主調函式和被調函式分別定義陣列,例如 void main 在被呼叫函式中宣告了形引數組的大小為10,但在實際中,指定其大小是不起任何作用的,因為c語言編譯對形引數組大小不做檢查,只將實參陣列的首元素位址傳給形引數組。形引數組可以不指定大小,在定義陣...