千家信息网

c++指针变量的传值和传址方法

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇"c++指针变量的传值和传址方法"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"c
千家信息网最后更新 2025年01月31日c++指针变量的传值和传址方法

这篇"c++指针变量的传值和传址方法"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"c++指针变量的传值和传址方法"文章吧。

1 引言

举个例子:在func函数退出后,指针pInt所指的内容*pInt为 12

#include 
//公众号: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 

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;
}

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

传值:实参拷贝传递给形参。就是把实参赋值给形参,赋值完毕后实参就和形参没有任何联系,对形参的修改就不会影响到实参。

传地址:把实参地址的拷贝传递给形参。就是把实参的地址复制给形参。复制完毕后实参的地址和形参的地址没有任何联系,对实参形参地址的修改不会影响到实参, 但是对形参地址所指向对象的修改却直接反应在实参中,因为形参指向的对象就是形参的对象

传引用:本质没有任何实参的拷贝,两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。

  • 无论传值还是传指针,函数都会生成一个临时变量,但传引用时,不会生成临时变量,
  • 传值时,只可以引用值而不可以改变值,但传值引用时,可以改变值,
  • 传指针时,只可以改变指针所指的内容,不可以改变指针本身,但传指针引用时,既可以改变指针所指的内容,又可以改变指针本身,
  • 引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

以上就是关于"c++指针变量的传值和传址方法"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

指针 函数 形参 变量 内容 地址 对象 内存 参数 就是 拷贝 指向 方法 c++ 所指 空间 错误 分配 变化 联系 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库写磁盘空间不足 水滴筹互联网科技公司怎么样 上海网络技术咨询服务报价表 浙江ipc工控机服务器 软件开发最难算法 广电网络安全事件典型分析 网络安全法题目测试 我是网络安全小卫士手抄报文字 数据库输入数据时报错 网络安全应建立什么制度 可用来写数据库语句的手机软件 上海微信软件开发机构 数据库技术与应用习题带答案 如何配置远程服务器虚拟环境 软件开发技术面试会面些什么 海康流媒体服务器配置 服务器防御攻击 计算机网络技术警察 gps服务器多少钱 网络安全领域对大数据的研究 ip服务器密码忘记了怎么办 党员领导干部的网络安全意识 奇安信认证网络安全吗 银川办公软件开发怎么收费 湖州市软件开发费标准 斑马网络技术有限公司待遇怎么样 山东设计少儿编程平台软件开发 理想连线网络技术股份 怎么还原下载的数据库 自动部署服务器
0