陣列作為函式實參

2021-06-17 15:42:41 字數 1113 閱讀 1829

陣列作為函式實參:

c語言中陣列作為函式實參時,編譯器總是將其解析為指向陣列首元素位址的指標

(位址呼叫

)原因:我們知道c

語言函式的呼叫有傳值和傳位址呼叫。假設

c語言對陣列採用傳值呼叫

(對實參作乙份拷貝,傳遞給被呼叫函式,函式不能修改實際實參值,而只能改變其拷貝

),然後如果拷貝整個陣列,則在時間和空間上開銷都非常大。而對於函式,只要知道實參陣列的首元素的位址,照樣可以訪問整個陣列,所以採用傳址呼叫效率更高。

注意的一點是對於函式來說,其接受的是陣列首元素的位址,所以它是並不知道陣列的大小的。

一維陣列作函式實參:

#include void fun(char *p)

void fun(char a[10])

void fun(char a)

void main(int argc,char* argv)

以上三個函式為一維陣列作為實參的函式常用的定義方式。三個函式輸出的結果都是4

,說明了傳給函式就是乙個位址,特別對於第二種定義,不要以為該函式只能接收大小為

10的陣列,實際實參陣列的大小與函式形引數組的大小是沒有任何關係的。最好採用第三種方式定義,因為第一種方式,我們也可以認為該函式的實參為指標,而第二種方式可能會誤認為該函式只能接收大小為

10的陣列。

二維陣列作為函式實參:

錯誤認識:既然一維陣列作為引數相當與乙個指標,那二維陣列作為引數就相當於乙個二級指標。

正確認識:二維陣列名作為引數時相當於乙個陣列指標(

指向一維陣列的指標)。

#include void fun(int a[4][3])

void fun(int (*p)[3])

void fun(int a[3])

void main(int argc,char* argv)

; fun(a);

}

以上二維陣列作為函式實參的函式常用的定義方式。函式定義中,陣列第二維的數目必須要與實參第二維的數目一樣,第一維的數目無所謂。因為二維陣列名做實參時,編譯器是將其解析為乙個指向大小為第二維的陣列的指標。

流作為函式實參

include include include include 使用setw必須 using namespace std void make neat ifstream messy file,ofstream neat file,int number after decimalpoint,int f...

將陣列作為實參傳遞

在c 中我們應該少用指標,多用引用,原因請大家自行搜尋。在傳遞陣列的時候我們需要格外注意,先讓我們看乙個簡單的範例。passarray.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std template void func1...

「陣列作為實參」的情況

陣列型別為const 指標,且附帶元素的型別和陣列長度資訊,僅當陣列元素的型別和陣列長度均相同時,兩個陣列型別才相同。比如,有 int a 16 b 15 a,b不是同乙個型別,因為陣列的長度不同。當實參為陣列型別時,比如有 int a 16 以a 作為實參,如果形參是非引用型別,比如 int pa...