函式返回指標分析

2021-06-19 05:36:04 字數 630 閱讀 8379

char * getptr(void)

char str [10] ;

char *p;

p = str;

return p;

char * getmallocptr(void)

char *p;

p = (char *)malloc(10 * sizeof(char));

return p;

上邊2個函式那個能正確返回?

getptr函式涉及2塊記憶體,一塊是分配給指標p的,在32位系統下分配4個位元組儲存位址(注:這個是系統分配的記憶體),系統為字元陣列分配了一塊記憶體,用來

儲存字元,這個也是系統自動分配的。

p = str 通過這條語句,讓指標p指向str的代表的10個位元組的記憶體。注意這2塊記憶體都是系統分配的,按照c的規則,系統分配的內存在超出作用域的時候會自動釋放。

函式結束返回指標p,函式返回指標p指向的記憶體釋放,也就是p指向了乙個無效的記憶體。所以錯誤。

getmallocptr函式和上邊不同的是p指向的內容是我們自己手動申請的,按照c的原則,手動申請的記憶體必須手動釋放。所以p返回指向的是乙個有效的內容。這個正確。

總結:不能返回乙個指向程式自己申請記憶體的指標,也就是我們說的指向棧記憶體的指標。(手動申請的內存在堆中)

指標與函式 返回函式指標

返回函式指標,其實就是返回乙個函式。返回值為乙個函式名就可以了。includeint add int num1,int num2 int subtract int num1,int num2 typedef int fptroperation int,int fptroperation select...

關於函式返回指標

昨天遇到乙個小問題。假設function foo 返回乙個指標,該函式目的在於從系統中獲取一些資訊,然後以指標的形式返回給使用者。這裡的指標是指向乙個全域性變數的 比如用乙個全域性的結構體來儲存資訊 當使用者區呼叫的時候,可以先宣告乙個指標,讓後將 結果返回給該指標。當使用者每次呼叫之後就使用該指標...

返回指標的函式

5.cpp created on 2011 8 13 author san include float search float pointer 4 int n int main void float p int i int m printf enter the number of student ...