C 函式傳參 永遠的複製 值傳遞

2021-08-30 05:39:55 字數 791 閱讀 5541

void process(a a){}

當process發生呼叫時,如

a b;

process(b);

這個時候發生的故事,是b的值(此時是物件值)複製,

將該物件傳給process, 因此process中的改變,對b沒有影響。

----我們喜歡將這個歸結為值傳遞。

void process(a* a){}

發生呼叫a b;

process(&b);

這個時候發生的故事,是&b的值(b的位址)賦值,

該位址傳給process, process中,通過位址,找到物件,並改變原物件。

所以,b發生改變。

----我們喜歡將其歸結為傳引用。

其實永遠都是傳值,但函式中操作的方式不同,所以才造成物件是否能變化的問題。

打個比方,有人給你寄了包裹,包裹(物件)寄到了郵局(物件位址),然後郵政人員列印了乙份取包裹的通知(上面有包裹物件的位址),這個時候,包裹通知總要留乙份存根吧!寫通知墊在底下的影印紙,而你就是取包裹的function,收到也僅僅只是通知的影印件,但你根據上面的位址操作開啟包裹,操作包裹,當然會對這個包裹產生作用。

假如是第一種情況的呼叫, 包裹傳遞給function的時候,會被複製乙份,操作的不再是原來的東西.

函式傳參只有一種方式:複製乙份,並傳值。究竟是操作原來的物件,還是值物件,就看函式怎麼利用傳入過來的值了,如果是通過位址找物件,當然對原來的物件產生了影響,否則,將不影響原來的物件。

所以,寫函式的時候,不要將物件作為引數,否則,棧的資源消耗會非常嚴重。 當然,除非有必要這樣做。

c 函式傳參 值傳遞 指標傳遞 引用傳遞

1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回實參。應為在呼叫函式時,形參和實參不是同乙個儲存單元。2 傳遞變數的指標 形參是指標變數,實參是乙個變數的位址,呼叫函式時,形參指向實參變數單元。可以通過形參指標修改實參的值。3 c 提供...

函式傳值傳參

var obj function x 內部宣告的變數不會影響外面的obj物件 console.log obj.n 2 obj 傳入的是乙個指標 值 x是obj指標的副本,兩者都指向同乙個物件 console.log obj.n 3 例子二 var x 1 function a x a x conso...

值傳遞和位址傳遞,C語言函式傳參方式詳解

在 c 語言中,函式的引數傳遞方式有兩種 值傳遞與位址傳遞。下面分別介紹這兩種傳遞形式。這種方式使用變數 常量 陣列元素作為函式引數,實際是將實參的值複製到形參相應的儲存單元中,即形參和實參分別占用不同的儲存單元,這種傳遞方式稱為 引數的值傳遞 或者 函式的傳值呼叫 值傳遞的特點是單向傳遞,即主調函...