这篇“c++指针变量的传值和传址方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c++指针变量的传值和传址方法”文章吧。
举个例子:在func
函数退出后,指针pInt
所指的内容*pInt
为 12
#include <stdio.h>
//公众号:C语言与CPP编程
int func(int* pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的内存空间给指针pRes,并赋值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt); return 0;
}
解析:int func(int* pRes)
函数的形参是指针类型 int *pRes
,在函数体中 new
了一块内存并赋值 12,将内存地址赋值给指针 pRes
。在main
函数中,定义了指针pInt
,调用func
函数,把pInt
作为参数传入func
函数中。结果*pInt
并不是 12。
原因:在func
函数调用过程中,形参和实参的传递使用了值传递
方式,这种情况下,形参变量在函数体内
发生了变化,在函数结束之后,形参变量随之释放
,不能把变化的结果返回给实参。
可以使用指针传递
或者引用传递
。想要在函数体内改变pRes
的值,并把这个变化返回到main
函数中,必须传递pRes
的指针。因为pRes
本身就是指针,所以应该传递指针的指针
,或者指针的引用
。
int v = 1;
int *p = &v;'
int *&rp = p;
&
说明r
是一个引用。*
确定r
引用的类型是一个指针。
因为引用不是对象,故无引用的数组,无指向引用的指针,无到引用的引用:
int& a[5]; // 错误
int&* p; // 错误
int& &r; // 错误
所以修改函数int func(int* pRes);
为int func(int *&pRes);
#include <stdio.h>
int func(int* &pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的内存空间给指针pRes,并赋值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt);
return 0;
}
传值:实参拷贝传递给形参。就是把实参赋值给形参,赋值完毕后实参就和形参没有任何联系,对形参的修改就不会影响到实参。
传地址:把实参地址的拷贝传递给形参。就是把实参的地址复制给形参。复制完毕后实参的地址和形参的地址没有任何联系,对实参形参地址的修改不会影响到实参, 但是对形参地址所指向对象的修改却直接反应在实参中,因为形参指向的对象就是形参的对象
。
传引用:本质没有任何实参的拷贝,两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。
以上就是关于“c++指针变量的传值和传址方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。