C++中函数参数类型为指针的指针

在C++中,每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化。

1 参数类型是非指针情况

例如,有如下函数

void func(char a)

{

a = 'a';

return;

}

使用如下方式调用func()函数

char b = 'b';

func(b);

此时,变量a是func()函数的形参,变量b是func()函数的实参。此时,在func()函数内部会创建一个临时变量保存实参的值,即字符’b’,接下来对该临时变量进行赋值,将其赋值为字符’a’,之后函数返回。此时,变量b的值并没有发生改变,其值依然是字符’b’。其流程如图1所示。

 

 

图1 func()函数流程

2函数参数类型是指针情况

函数参数是指针时包含两种情况,一种是在函数中对指针指向的内容进行修改,另一种情况是对指针本身进行修改。

2.1 对指针指向的内容进行修改

将func()函数的修改为

void func(char* a)

{

*a = 'a';

return;

}

调用func()函数的代码为

char* b = new char();

*b = 'b';

func(b);

当调用func()时,func()函数内部会有一个临时变量保存b的内容,该内容是一个char指针,指向的内容是字符’b’;接下来将该临时变量所指向的内容改为字符’a’,此时相当于指针b指向的内容被修改成了字符’a’。当函数func()返回后,temp的值被释放,但是temp指向的内容已经被修改,即字符指针b指向的内容已经被修改。

其流程如图2所示。

 

图2 func()函数流程

2.2指针本身进行修改

将func()函数修改为

void func(char* a)

{

a = new char();

*a = 'a';

return;

}

在func()函数中,首先创建一个临时变量保存了指针b的内容,之后对临时变量本身的内容进行修改,将其赋值为新分配的内存地址,最后将新分配的内存的内容设置为字符’a’。

调用func()的代码为

char* b = new char();

*b = 'b';

func(b);

此时,指针b指向的内容没有发生变化,仍是字符’b’。其流程如图3所示。

 

图3 func()函数流程

3 函数参数类型是指针的指针

将func()函数修改为

void func(char** a)

{

*a = new char();

**a = 'a';

return;

}

在func()函数中,参数类型修改为char**,即指针的指针。在函数内部,首先创建一个临时变量来保存该指针的指针,之后把该变量本身修改为一个新分配的地址,即修改了指针的指针的指向,最后把新分配的内存设置为字符’a’。调用func()函数的代码是

char* b = new char();

*b = 'b';

func(&b);

此时,指针b指向的内容发生了变化,变为字符’a’,其流程如图4所示。

 

图4 func()函数流程

  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值