函數的參數是一個一級指針,可以傳遞內存嗎?
如果函數的參數是一個一級指針,不要指望用該指針去申請動態內存。
看下面的實例:
#include
using namespace std;
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);//指針解引用操作才是更新其指向
// 這里沒有解引用,直接操作的是指針本身,而不是指針指向
cout<
}
void main()
{
char *str = NULL;
GetMemory(str, 100);// str 仍然為 NULL
if(str==NULL)
{
cout<
}
else
{
strcpy(str, "hello");
cout<
}
cout<
system("pause");
}
/*
0012FEF0
str是空指針!
0012FF44
*/
在函數中,當用指針做參數時,需要解引用操作才是更新指針指向的值,如果不用有解引用操作,相當于就是對指針本身的操作,與指針的指向的內容沒有關系。

怎么樣才可以使用指針參數來傳遞內存呢?
首先要明白以下兩個問題:
I 動態申請內存是返回一個地址,用指針可以保存這個地址。II 實參必須是一個指針,如char* str,要操作這個指針本身的地址&str,可以用一個二級指針來作為左值為接收這&str,如char** p = &str,這樣用*p與str同一。
所以如果要用函數的指針參數來傳遞內存,這個指針參數必須是一個二級指針:
#include using namespace std;void GetMemory(char **p, int num){*p = (char *)malloc(sizeof(char) * num);//*p是**P指向的值(指針)cout<

-End-