当前位置:首页 > 天道酬勤 > 正文内容

传指针和传参数(java传值还是传引用)

张世龙2021年12月21日 05:26天道酬勤1360

1 引言

例: func函数结束后,指针pInt所指的内容*pInt为12

# #包括stdio.h

//公众号: c语言和CPP编程

int func (英特尔预算) ) )。

{

if (pres==空值) )。

pres=新int (12; //将新的内存空间分配给指针pRes并分配值

返回0;

}

int主() )

{

int * pint=空值;

intval=func (平;

打印机(% d (n )、*点); 返回0;

)解析: intfunc(int *pRes )函数的自变量为指针型int*pRes,将内存设为new后分配为12,将内存地址分配给指针pres。 在main函数中,定义指针pInt,调用func函数,并将pInt作为参数传递给func函数。 结果*pInt不是12。

原因:在func函数调用中,对形参和实参的传递使用了传递值的方式。 在这种情况下,形参变量在函数体内变化,函数结束后,形参变量被释放,不能将变化的结果返回实际参照。

可以使用指针传递或引用传递。 要在函数中改变pRes的值并将该变化返回给main函数,必须传递pRes的指针。 由于pRes本身是指针,因此应该传递指针的指针或指针的引用。

指针的引用

intv=1;

int*p=v; ' '

int*rp=p; r表示是引用。 * *确保r引用的类型是指针。

因为引用不是对象,所以没有引用数组、指向引用的指针或对引用的引用:

国际电信联盟; //错误

英特尔* P; //错误

intr; //因为错误而修正函数intfunc(int*pres )的intfunc(int*pres );

# #包括stdio.h

int func (英特尔预算) ) )。

{

if (pres==空值) )。

pres=新int (12; //将新的内存空间分配给指针pRes并分配值

返回0;

}

int主() )

{

int * pint=空值;

intval=func (平;

打印机(% d (n )、*点);

返回0;

(}

2 传值、传引用区别和联系

传值)将实参副本交给形参。 就是将实参代入形式中。 代入结束后,实参和形参没有任何联系。 形状的修改不会影响实际参照。

转发地址:将实际参考地址的副本转发给形式参考。 是将实际的地址复制成形式参考。 复制完成后,实参地址与形参地址没有任何联系,实参形参地址的修改不影响实参,但形参地址所指对象的修改直接反应实参。 因为形参所指的对象是形参的对象。

引用:本质上没有实际参照的副本,两个变量指向同一个对象。 这是对形参的修改,必然反映在实参上。

传递值和指针时,函数都会生成临时变量,但传递引用时不会生成临时变量。 传递值时只能引用值,不能更改值,但传递值时可以更改值。 传递指针时只能改变指针指向的内容,不能改变指针本身,但传递指针引用时可以改变指针指向的内容和指针本身,另一方面,参照传递函数的参数时,可以改变一般的变量传递函数的参数参数是实际参数的副本。 如果传递了对象,也将调用复制构造函数。 因此,如果通过参数传递的数据很大,则使用引用比通过常规变量传递更有效率和占用空间。

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26118.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。