參考《程式設計師面試寶典》
例1 下面的程式執行會有什麼結果?
#include void getmemory(char *p, int num)
;int main()
執行該程式會崩潰,因為getmemory在這裡不能傳遞動態記憶體,test函式中的str一直都是null。該例中,void getmemory(char *p, int num)中的
*p實際上是主函式中的str的乙個副本,編譯器總是要為函式的每個引數製作臨時副本。p申請了新的記憶體,只是把p所指的記憶體位址改變了,但是str絲毫未變,str並沒有指向p所申請的那段記憶體。
可以做如下修改:
#include void getmemory(char **p, int num)
;int main()
或者使用函式返回值來傳遞動態記憶體
#include char *getmemory(char *p, int num)
;int main()
為了加深理解指標p,&p,*p,可以再看看這個例子:
#include #include using namespace std;
int main(int argc, char *argv)
{ int *p = null;
cout<<"p: "<
p: 0
&p: 0x22ff44
&a: 0x22ff38
p: 0x22ff38
&p: 0x22ff44
*p: 5
p: 0x22ff3c
&p: 0x22ff44
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道。這些往往會使人受盡折磨,所以如果你想深入c c 程式設計,你必須靜下心來好好苦一番。現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞。並且在軟體開發中很多專業人...
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...