天天看点

《从缺陷中学习C/C++》——6.6 指针变量的传值和传址

本节书摘来自异步社区出版社《从缺陷中学习c/c++》一书中的第6章,第6.6节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

从缺陷中学习c/c++

代码示例

现象&结果

函数返回后,指针pres所指内容不是12。

bug分析

上述代码中func函数的形参是指针类型 int pres,在函数体中new了一块内存并赋值12,将内存地址赋值给指针pres。在main函数中,定义了指针pint,调用func函数,把pint作为参数传入func函数中。程序的本意是在func函数退出后,指针pint所指的内容pint为12,但实际结果却不是。其原因是在func函数调用过程中,形参和实参的传递使用了值传递方式,这种情况下,形参变量在函数体内发生了变化,在函数结束之后,形参变量随之释放,不能把变化的结果返回给实参。要改变实参的值,必须使用指针传递或者引用传递。在本程序中,func函数的形参是整形指针类型int * pres,要在函数体内改变pres的值,并把这个变化返回到main函数中,必须传递pres的指针。因为pres本身就是指针,所以应该传递指针的指针,或者指针的引用。

正确代码

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

继续阅读