c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?

函数的参数是一个一级指针,可以传递内存吗?

如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存。

看下面的实例:

#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

*/

在函数中,当用指针做参数时,需要解引用操作才是更新指针指向的值,如果不用有解引用操作,相当于就是对指针本身的操作,与指针的指向的内容没有关系。

5f33d1213b72b701531117f790284972.png

怎么样才可以使用指针参数来传递内存呢?

首先要明白以下两个问题:

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<
bff5b17e919325ef28d09a4c4b484a8a.png

-End-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值