c 動態記憶體傳遞

2021-08-07 05:13:56 字數 979 閱讀 6885

最近在看程式設計師面試寶典的書中遇到了傳遞動態記憶體的問題。

#include using namespace std;

void getmemory(char *p,int num)

void test(void)

int main()

書上的解釋是:在函式getmemory(char *p,int num)中,*p實際上是主函式中str的乙個副本,p申請了記憶體,只是把p指向的記憶體位址改變,而str並沒有改變,所以str依然沒有獲得記憶體,在執行字串複製時就會出錯。而且每次p申請的記憶體都不會得到釋放,最終會造成記憶體洩露。

不勝理解,查詢相關資料發現是值傳遞和位址傳遞的問題。

在c語言中函式引數的傳遞有:值傳遞,位址傳遞,引用傳遞這三種形式。

1、值傳遞:

形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來說,值傳遞是單向的(實參->形參),引數的值只能傳入,

不能傳出。當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞。

典型**:

#include using namespace std;

void swap(int p,int q)

void test(void)

void test(void)

void test(void)

{ char *str=null;

getmemory(&str,100);

strcpy(str,"hello");

//cout<

char *str=null;棧中操作的時候,記憶體為記憶體為0x28ff2c的位址儲存內容為null

記憶體分配方式有三種:

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道。這些往往會使人受盡折磨,所以如果你想深入c c 程式設計,你必須靜下心來好好苦一番。現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞。並且在軟體開發中很多專業人...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...