指標 動態記憶體傳遞

2021-09-12 09:02:31 字數 823 閱讀 9666

int *pi;

*pi=5;

上述**是錯誤的,整數指標pi並沒有指向實際的位址,賦的值不知道該放到**去。

2. 下面哪個能夠成功實現兩個數的交換。

1)void swap1(int a, int b)		

2)void swap2(int *a, int *b)

3)void swap3(int *a, int *b)

4)void swap4(int *a, int *b)

5)void swap5(int &a, int &b)

int main()

swap1傳的是值的副本,在函式體內被修改了形參a和b,a和b的值確實交換了,但它們是區域性變數,不會影響到主函式的m和n。當函式生命週期結束時,a和b所在的棧也就被刪除。

swap2傳的是乙個位址進去,在函式體內的形參a和b,是指向實際引數m,n位址的兩個指標。但

int *temp;

*temp=*a;

是不符合邏輯的一段**,int *temp;新建了乙個指標但沒有分配記憶體,temp=a;是拷貝不是指向,也就是把a所指向的記憶體裡的值(也就是實參m的值)拷貝到temp所指向的記憶體裡了(int *temp的確是不進行記憶體分配,於是在系統拷貝是會臨時給乙個隨機位址,分配的隨機位址是個意外,且函式結束後不收回,造成記憶體的洩露 )。

swap3不能實現,因為函式體內只是指標的變化,而對位址中的值卻沒有改變。

swap4可以實現兩數的交換。它修改的是指標所指向位址中的值。

swap5與swap4類似,是乙個引用傳遞,修改的結果直接影響實參。

傳遞動態記憶體

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

傳遞動態記憶體

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

傳遞動態記憶體

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