C語言基礎補充5 C語言陣列引數是怎麼傳遞的?

2021-09-25 19:02:02 字數 1130 閱讀 8866

陣列在我們的c語言中,陣列與指標的最為關鍵的,那麼基本的介紹以及使用就不多說了,但是,陣列的引數在傳遞過程中,是怎麼傳遞的,可能有很多朋友都不知道。

以上面的例子為例,我們一般給函式傳乙個陣列引數,按照上面編寫**是絕對沒錯的,但是,我們編譯器,我們的c語言真的是將整個陣列傳遞過去給函式了嗎?

如果將**改為:

但是輸出的結果卻是:

證明了並沒有把整個陣列的資料傳遞給函式

實際上,陣列在傳遞過程中,並沒有把整個陣列的資料傳遞過去,因為在gcc編譯器中認為,這樣是很繁瑣的一件事情,因此,在以上**中編譯器對其進行了改寫:

那麼有c語言基礎的朋友一眼就懂了

正是因為傳遞整個陣列的資料太過於繁瑣,因此gcc編譯器決定使用傳遞陣列a[0]的位址來代替。

而傳遞過去的只是陣列的位址,還不知道陣列的大小,因此還得告訴函式這個函式的界限,也就是陣列的大小,因此將函式的形參改為了:int *a , int len

執行結果:

因為在c語言的學習中,為了讓大家都能夠更加容易去接受c語言,因此在程式設計的時候,可以讓程式設計者認為把整個陣列傳遞過去了,但是編譯器為了提高效率,實際上只是傳遞了陣列的位址過去函式。

因此,如果要讓自己的程式設計水平有所提高,就應該往更加深層的一面去理解。

int a[3]

int *p

5 c語言陣列

其中包括 冒泡 高精度加法 統計不相同的數字個數 陣列 陣列元素倒序輸出 go 1 include 234 5功能 冒泡67 6功能 高精度加法78 9void main 10 12int b m 13int c m 14char s m 1 15 int i 0 16 int n1 0 17 in...

C語言 陣列引數

c語言規定陣列變數arr,本身就是位址 指向該陣列第乙個元素的型別的指標 arr也是位址 指向整個陣列的型別的指標 所以陣列引數就是指標引數 pragma warning disable 4996 include 引用函式庫 include void test int a void main pri...

C 學習筆記(5) C語言與C 的區別

標頭檔案c語言 c stido.h iostream math.h cmath string.h cstring sdilib.h cstdlib 命名空間 重複的識別符號 using namespace std 使用std命名空間 std cout 註明cout來自於哪個命名空間 cout cin...