以指標作為實參的問題

2022-03-29 13:56:50 字數 724 閱讀 6148

以指標作為實參時,實參p傳遞給形參p1的其實是p的拷貝,所以在區域性函式中改變形參p1的指向對身處主函式的p是無影響的,但是因為p1是p的拷貝,

所以他們的指向是相同的,所以可以通過p1修改了那塊記憶體的值。如果實參p的指向為空,也就是說p是乙個空指標的話,那麼它就沒有指向某塊記憶體,

形參也就無法操作p所指向的記憶體了(因為p本就沒有指向任何一塊記憶體),即使p1在區域性函式中指向了乙個malloc的空間,

這其實是改變了p1的指向(從null到指向malloc的空間),但是如前所述,p1只是p的拷貝,改變副本的指向對本尊是沒有任何影響的,

所以對p沒有影響,p還是為空。但是因為p1的生存週期是在區域性函式範圍內,所以一旦函式執行結束,p1這個變數就會被銷毀釋放,

但是那塊malloc的空間卻不會被釋放,那就會成為空間碎片。

實參指標為空的乙個例子:

#include #include void f(int *p1)

int main()

實參指標不為空的乙個例子:

#include #include void f(int *p1)

int main()

傳乙個空指標時可以用二級指標

#include #include void f(int **p1)

int main()

C語言 以指標作為實參的問題

以指標作為實參時,實參p傳遞給形參p1的其實是p的拷貝,所以在區域性函式中改變形參p1的指向對身處主函式的p是無影響的,但是因為p1是p的拷貝。所以他們的指向是相同的,所以可以通過p1修改了那塊記憶體的值。如果實參p的指向為空,也就是說p是乙個空指標的話,那麼它就沒有指向某塊記憶體。形參也就無法操作...

「陣列作為實參」的情況

陣列型別為const 指標,且附帶元素的型別和陣列長度資訊,僅當陣列元素的型別和陣列長度均相同時,兩個陣列型別才相同。比如,有 int a 16 b 15 a,b不是同乙個型別,因為陣列的長度不同。當實參為陣列型別時,比如有 int a 16 以a 作為實參,如果形參是非引用型別,比如 int pa...

C 指標作為函式引數的問題

其實,對於c 或者c 最難的一塊地方估計就是指標了。指標是強大的,但也是很多人載在這裡的地方。前段時間寫了一篇文章 c 之 陣列與指標的異同 對c 和c 中的指標做了乙個初步的講解。這次將講解一下指標作為函式引數傳遞的問題。很多人對於指標的使用是有所了解的,但還是經常會載在指標的問題上,是因為還不夠...