函数的参数是一个一级指针,可以传递内存吗?
如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存。
看下面的实例:
#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-