1
在爲個人項目編程時,我發現當我傳遞指向一個函數的指針時,其值無法更改。例如:看調試器後malloc返回的指針是否可以更改
...
GString *buf = NULL;
buf = g_string_sized_new(64);
somefunc(buf, filename);
...
和
void somefunc(GString *buf, gchar *filename)
{
buf = otherfunc(filename); //otherfunc() returns a GString *
}
我觀察到,當用於緩衝存儲器運行分配,則BUF = 0x80b720和otherfunc()返回0x80b750。儘管緩衝區的值沒有改變。所以我想問一下,如果有人知道爲什麼會發生這種情況,並且這是malloc()的一般特性。換句話說,如果將malloc()調用返回的指針傳遞給函數,那麼您能夠在函數體內部或外部更改此值嗎?
可能要提及的,術語「由值傳遞」,和C是[按值傳遞](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value),而不是[通過傳參考](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference)。 – sfstewman 2012-07-18 00:52:48
我也想指出,改變函數內的buf值可能導致內存泄漏(因爲現在你不能釋放最初分配的內存) – 2012-07-18 00:54:45
我想補充一點,傳遞一個指向函數的指針很漂亮就像傳遞一個整數到一個函數一樣,只是整數碰巧是一個內存地址。 – 2012-07-18 00:55:00