C++语言中函数参数传递的本质是值传递

C语言中只有值传递,也就是传递副本,指针传递的只是地址的副本

当然,如果你传递了一个指向某个变量的指针,而函数对该指针执行了间接访问操作,那么函数就可以改变那个变量,但参数还是传值方式传递的,这是两个概念,不矛盾。

而对于引用传递,表面上看不会产生一个副本,看下面的代码吧,不多多了

#include<iostream>
#include<string>
using namespace std;
//总结真正的理解值传递和指针传递,不是实参是指针变量,就代表是传指针,也是传值,因为都是
//传的变量,不管是指针变量,还是其他变量。
void testgetmemory(char *p)
{
	printf("testgetmemory 指针 p addr is [%x], p's value is[%x],*p is %c\n", &p,p,*p);
	*p = 'z';
}

void testgetmemory1(char &q)
{
	printf("testgetmemory 引用 q addr is [%x] q is %c\n", &q, q);
	q = 'z';
}
int main()
{
	char w = 'c';
	printf("w addr is [%x],w is %c\n", &w, w);
	testgetmemory1(w);
	testgetmemory(&w);
	return 0;
}

输出的结果如下:

w addr is [3ef8f3],w is c
testgetmemory 引用 q addr is [3ef8f3] q is c
testgetmemory 指针 p addr is [3ef81c], p's value is[3ef8f3],*p is z
请按任意键继续. . .

现在看总结如下:

传递指针同样会产生一个副本

而传递引用确实没有副本,因为传毒引用的话,和之前的变量地址相同都是 3cf7df

而传递指针变量的时候 产生了一个副本指针变量,其地址已经不是3cf7df而是一个新的地址,3cf708

但是这个变量里面的内容是上面的地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值