c語言傳遞引數

2021-08-07 19:58:45 字數 2803 閱讀 1771

1.標準資料型別,int ,char 等。

如果c傳遞的是單個資料型別,會在被調函式中重新建立乙個物件。

所以,無論我們在被調函式中怎麼修改,主調函式的值不會發生變化。

2.陣列。

當我們傳遞的引數是乙個陣列時,c傳遞的是陣列首元素的位址。

所以當我們在被調函式中做修改了,主調函式的值也會變化。

3.自定義資料型別,struct。

首先,對於單個的struct,它的記憶體分配情況符合上述標準的邏輯。

void test_pass_str_name(t_str test)
在被呼叫時,test會被重新分配一塊記憶體,data值和主調函式的值相等,prive的值也和主調函式相同(指向同一片記憶體區域)。

我們給prive申請一塊記憶體後,它指向了乙個全新的記憶體區域。

此時,不論我們怎麼修改data,和prive指向的記憶體區域的值,都不會影響主調函式。

但是,自定義資料有個特殊情況,那就是裡面帶有指標。當我們傳遞乙個資料元素時,被調函式會拷貝全部的數值給新的物件,指標也會拷貝,此時,雖然他們是兩個不同的物件,但是因為他們的指標都指向同一片記憶體區域,所以我們在被調函式中修改了指標指向的內容時,主調函式的值也會改變。

void test_pass_str_name_point(t_str test)
test_pass_str_name_point(test);

printf(" after pass pointer, dump in call fun \n");

dump_str(test);

我們在主函式中再次列印字串,發現值已經變了。

#include #include #include #define prive_length 64

typedef struct t_str;

void dump_str(t_str str)

else

printf("<---------------\n");

}void test_name()

void test_pass_str_name(t_str test)

void test_pass_str_name_point(t_str test)

void test_pass_str_array_name(t_str test[1])

void test_str_pass_name()

#define array_size 10

typedef char array[array_size];

void dump_char_array(array array){

printf("------------->\n");

for(int i=0; i執行結果:

test str

------------>

str.data:=0

str.prive is null

<---------------

in pass fun

------------>

str.data:=1

str.prive:= hello

<---------------

pass fun end

------------>

str.data:=0

str.prive is null

<---------------

in pass fun

------------>

str.data:=1

str.prive:= hello

<---------------

pass fun end

after pass pointer, dump in call fun

------------>

str.data:=0

str.prive:= hello

<---------------

test str array

------------>

str.data:=0

str.prive is null

<---------------

in pass fun

------------>

str.data:=1

str.prive:= hello

<---------------

pass fun end

------------>

str.data:=1

str.prive:= hello

<---------------

test pass char

in pass name fun

------------->

array[0]:= 0 array[1]:= 1 array[2]:= 2 array[3]:= 3 array[4]:= 4 array[5]:= 5 array[6]:= 6 array[7]:= 7 array[8]:= 8 array[9]:= 9

<------------

pass name fun end

------------->

array[0]:= 0 array[1]:= 1 array[2]:= 2 array[3]:= 3 array[4]:= 4 array[5]:= 5 array[6]:= 6 array[7]:= 7 array[8]:= 8 array[9]:= 9

<------------

C語言傳遞指標引數

簡單來說,指標是乙個儲存計算機記憶體位址的變數。所有的指標都儲存了記憶體位址。它們的型別只在取值時起作用。指標在c語言中是個十分重要的概念,可以搜尋相關資料進行深入學習,也可以參考 c語言指標簡介 簡單了解。c語言函式引數傳遞有兩種方式,一種是傳值呼叫,一種是傳址呼叫。那麼如果指標作為引數,應該怎麼...

關於C語言傳遞引數的問題

要求 編寫乙個函式,將rgb資料顯示到tft彩屏上,rgb資料為565格式,平台 stm32f030 lcd st7735s 編譯平台 mdk5.14 對於這個一般的來說很多人會這麼寫 void lcd draw rgb u16 x,u16 y,u16 x size,u16 y size,u16 p...

Go語言傳遞變長引數

如果函式的最後乙個引數是採用.type的形式,那麼這個函式就可以處理乙個變長的引數,這個長度可以為 0,這樣的函式稱為變參函式。func myfunc a,b,arg int 這個函式接受乙個類似某個型別的 slice 的引數 詳見第 7 章 該引數可以通過第 5.4.4 節中提到的 for 迴圈結...