C語言函式呼叫傳遞引數時的型別退化

2021-07-07 02:14:20 字數 530 閱讀 9887

首先看乙個例子:

#include

void test(int a[10]);

int main()

;printf("%d\n",sizeof(a));  //40

test(a);

return 0;

}void test(int a[10])  //  int * a;   

程式執行結果:

我們定義乙個含有10個元素的陣列,那麼對它的進行sizeof求得的值為40 這是必然的,然而將陣列a通過函式傳遞過去,再進行sizeof操作得得到的結果卻是4,4很明顯是乙個指標了,那麼可以斷定,呼叫函式的時候將引數中是陣列的型別退化到了其基本型別的指標,也就是本例中 將int  [10]型別退化為 int *型別,同時這種做法也避免了引數傳遞中的複製陣列的巨大開銷(如果陣列長度很大的話)。

當然,這樣也就起不到對引數進行保護的作用了,因為傳遞進去的是指標。

c 函式呼叫引數傳遞

在c 中,引數傳遞的方式是 實虛結合 按值傳遞 pass by value 位址傳遞 pass by pointer 引用傳遞 pass by reference 按值傳遞的過程為 首先計算出實參表示式的值,接著給對應的形參變數分配乙個儲存空間,該空間的大小等於該形參型別的,然後把以求出的實參表示式...

C語言的引數傳遞型別

開講之前,我先請你做三道題目。嘿嘿,得先把你的頭腦搞昏才行 唉呀,誰扔我雞蛋?考題一,程式 如下 void exchg1 int x,int y main 輸出的結果為 x y a b 問下劃線的部分應是什麼,請完成。考題二,程式 如下 void exchg2 int px,int py main ...

呼叫方法時引數的傳遞

呼叫方法時,傳遞給方法的變數如果是基本型別,傳入到方法中後就是該方法的區域性變數,在呼叫時會在記憶體中開闢新的空間去儲存,所以對於引數名與成員變數一致的情況下,方法中改變的變數的值是與成員變數不衝突的,也就是不會影響到成員變數,除非使用this關鍵字來指向成員變數!下面是 示例 public cla...