**:
有兩種傳遞方法,一種是function(int a); 另一種是function(int *a)
這兩種兩種方法在函式中對陣列引數的修改都會影響到實參本身的值!
對於第一種,根據之前所學,形參是實參的乙份拷貝,是區域性變數。但是陣列是個例外,因為陣列的資料太多了,將其一一賦值既麻煩又浪費空間,所以陣列作為引數傳遞給函式的只是陣列首元素的位址,資料還是在記憶體裡的,函式在需要用到後面元素時再按照這個位址和陣列下標去記憶體查詢。也就是說後面的元素根本沒到函式裡來。所以,這裡也不能在test()函式內部用sizeof求陣列的大小,必須在外面算好了再傳進來。
對於第二種,則是傳址呼叫,無需再說。
這裡還有幾點需要注意:
1.在以上兩個函式的形參前面加上const則表示整個陣列唯讀,而不是只有首位址對應儲存的資料唯讀。
2.第二種形式不能用c++11中的for...auto來迴圈列印。
3.陣列的大小要用sizeof()來求,不能用.size(),因為.size()只有struct 或者union才能用, vector算是struct!
4.如果在函式內部又宣告乙個int* tmp型別的變數,然後把p賦值給tmp, 通過tmp修改數陣列也是一樣,都會修改實參本身!
#include
#include
using
namespace
std;
void
test1(
int
,
int
size);
void
test2(
int
*p,
int
size);
//void test2(const int *p, int size);
int
main(
void
)
;
int
size =
sizeof
(a)/
sizeof
(
int
);
/*這裡列印出的a值與test1(),test2()中的p值相等
*即位址值相同*/
printf
(
"%p \n"
, a);
//test1(a, size);
test2(a, size);
int
i;
printf
(
"main: "
);
for
(i = 0; i < size; ++i)
}
void
test1(
int
p,
int
size)
printf
(
"\n"
);
}
void
test2(
int
*p,
int
size)
printf
(
"\n"
);
}
C 中陣列作為形參的方法
有兩種傳遞方法,一種是function int a 另一種是function int a 這兩種兩種方法在函式中對陣列引數的修改都會影響到實參本身的值!對於第一種,根據之前所學,形參是實參的乙份拷貝,是區域性變數。但是陣列是個例外,因為陣列的資料太多了,將其一一賦值既麻煩又浪費空間,所以陣列作為引數...
陣列作為形參
在函式傳遞值的過程中,一般都是值傳遞但是陣列確實傳遞的指標,這樣主要用於避免過多資料複製占用過多的記憶體空間。我們在設定函式的時候可以使用 int puta const int geta,int s a 來避免原始陣列受到修改,如此的話修改會報錯 input.cpp in function int ...
在函式中以陣列作為形參的方法
本文介紹了三種在函式中以陣列作為形參時的處理方法,重點介紹c 11標準是如何管理陣列大小的。陣列的兩個特殊性質對我們定義和使用作用在陣列上的函式有影響,這兩個性質分別是 不允許拷貝陣列以及使用陣列時通常會將其轉換成指標。因為不能拷貝陣列,所以我們無法以值傳遞的方式使用陣列引數。因為陣列會被轉換成指標...