傳遞動態記憶體

2021-06-13 12:39:36 字數 901 閱讀 4044

參考《程式設計師面試寶典》

例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 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...