菜鳥學習 C語言函式引數傳遞詳解 結構體與陣列

2021-07-03 19:20:39 字數 930 閱讀 6473

c語言中結構體作為函式引數,有兩種方式:傳值和傳址。

1.傳值時結構體引數會被拷貝乙份,在函式體內修改結構體引數成員的值實際上是修改呼叫引數的乙個臨時拷貝的成員的值,這不會影響到呼叫引數。在這種情況下,涉及到結構體引數的拷貝,程式空間及時間效率都會受到影響。

例子:

typedef

struct tagstudentstudent;

void fun(student stu)

2.傳指標時直接將結構體的首位址傳遞給函式體,在函式體中通過指標引用結構體成員,可以對結構體引數成員的值造成實際影響。效率高,常在大型專案中用到,如著名的開源構架nginx中對於結構體的使用就是乙個很好的例子。例子該會在最後給出。

c語言中陣列作為函式引數,一般傳遞的是陣列的首位址。因此在陣列名作函式引數時所進行的傳送只是位址的傳送, 也就是說把實參陣列的首位址賦予形參陣列名。形參陣列名取得該首位址之後,也就等於有了實在的陣列。實際上是形引數組和實參陣列為同一陣列,共同擁有一段記憶體空間。例子同樣見下面nginx的使用。

ngx_module_t ngx_http_mytest_module = ;最後便於理解,給出ngx_module_t的定義

typedef

struct ngx_module_s ngx_module_t;

struct ngx_module_s ;

C語言函式引數的傳遞詳解

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

C語言函式引數的傳遞詳解

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

go語言 函式引數傳遞詳解

引數傳遞是指在程式的傳遞過程中,實際引數就會將引數值傳遞給相應的形式引數,然後在函式中實現對資料處理和返回的過程。比較常見的引數傳遞有 值傳遞,按位址傳遞引數或者按陣列傳遞引數.1 常規傳遞 使用普通變數作為函式引數的時候,在傳遞引數時只是對變數值的拷貝,即將實參的值複製給變參,當函式對變參進行處理...