C基礎 函式引數副本

2022-05-08 21:18:13 字數 418 閱讀 4353

**:

1

void getmemory(char *p, int

num)25

6void main(void)7

請問執行mian函式的結果如何?其實執行是會報錯的,為什麼呢?

毛病出在getmemory中。

編譯器總是要為函式的每個引數製作臨時副本,指標引數p的副本是_p, 編譯器使_p=p(二者指向同一塊區域)。如果函式體內的程式修改了_p指向的內容,就導致引數p指向的內容做了相應的修改,這就是指標可以用做輸出引數的原因。

但是在上述的**中,_p申請了新的記憶體,也就是_p本身的值改變了,即指向了新的記憶體空間,但是p本身絲毫未變。所以函式getmemory並不能輸出任何東西。事實上,每執行一次getmemory就會洩露一塊記憶體,因為沒有用free釋放記憶體。

函式傳遞的引數是原引數的副本

函式的傳遞的引數是原引數的副本 使用c語言程式設計,不可能不用到函式,但是函式的引數傳遞,我們是否真的清楚了呢。本文主要介紹c語言中函式傳遞的引數。函式的引數通常分為兩種,普通變數,指標變數。這些引數,將會被函式體呼叫,當讓,也可以傳入一些永遠不被函式呼叫的引數,就像你宣告了一些變數,卻永遠不用一樣...

函式傳遞的引數是原引數的副本

函式的傳遞的引數是原引數的副本 使用c語言程式設計,不可能不用到函式,但是函式的引數傳遞,我們是否真的清楚了呢。本文主要介紹c語言中函式傳遞的引數。函式的引數通常分為兩種,普通變數,指標變數。這些引數,將會被函式體呼叫,當讓,也可以傳入一些永遠不被函式呼叫的引數,就像你宣告了一些變數,卻永遠不用一樣...

函式傳遞的引數是原引數的副本

函式的傳遞的引數是原引數的副本 使用c語言程式設計,不可能不用到函式,但是函式的引數傳遞,我們是否真的清楚了呢。本文主要介紹c語言中函式傳遞的引數。函式的引數通常分為兩種,普通變數,指標變數。這些引數,將會被函式體呼叫,當讓,也可以傳入一些永遠不被函式呼叫的引數,就像你宣告了一些變數,卻永遠不用一樣...