c++中的传值,传地址和引用

本文详细介绍了C++中的三种参数传递方式:值传递、地址传递(指针)和引用传递。值传递不会改变原始变量值,而地址传递和引用传递则允许在函数内部直接修改实参的值。通过示例代码,阐述了每种传递方式的工作原理及其在实际编程中的应用。引用作为变量的别名,操作引用即操作原变量。在需要修改参数或返回多个值时,引用传递更为适用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++中的传值传址和引用

传值

void main(){
     printf("Hello World!\n");
      int a = 3;
      int b = 4;
      printf("bef swap, add of a = %d\n",&a);
      printf("aft swap, val of a = %d\n",a);
      swap(a,b);
      printf("aft swap, add of a = %d\n",&a);
      printf("aft swap, val of a = %d\n",a);
 }

void swap(int a,int b){
int temp = a;
 a = b;
 b = temp;
 }

先看这段代码,swap这个函数作用是交换ab的值。
首先,在进行处理之前,实参a会把值传给形参a,实参a的地址还是1638212,函数里面的操作都是对形参a的操作,例如,形参a的地址为123,那么就是对地址123来进行赋值操作。对实参a没有影响。
在这里插入图片描述

传地址

int* a; int* b; 这是两个指针变量。指针是一种特殊的数据类型。举个例子,int n = 1; int *a = &n; 那么a就是一个指针变量,他的值就是变量n的地址,*a的值就是n地址下存放的值,也就是1。

void swap(int *a,int *b){
int temp = *a;
 *a = *b;
 *b = temp;
 }

结果
在这里插入图片描述
这里我们的函数直接传进来的是指针,直接对地址进行赋值和取值操作,也就是说,存放3和4的地址变了,但是指针a所指向的地址还是指向之前未交换之前3的地址。

引用

引用就是变量的一个别名,其实对引用的操作就是对原对象的操作,可以简单地理解为,传递进去的就是实参本身。

void swap(int &a,int &b){
int temp = a;
 a = b;
 b = temp;
 }

结果:
在这里插入图片描述
这里是直接对a和b进行操作的,同时,只是改变了a和b所对应地址里面的值,但是没有改变a和b的地址。

举个例子

void main(){
    printf("Hello World!\n");
    int a = 3;
    int b = 4;
    int* c = &a;//c是指向a的指针
    int& d = b;//d是b的引用,alias of b = d
    printf("val of a = %d\n",a);
    printf("add of a = %d\n",&a);
    printf("val of c = %d\n",c);
    printf("add of c = %d\n",&c);
    printf("val of b = %d\n",b);
    printf("add of b = %d\n",&b);
    printf("val of d = %d\n",d);
    printf("add of d = %d\n",&d);
}

结果:
在这里插入图片描述
可以看到,指针c是有自己的地址的,而且c的值是a的地址,*c就代表指向a地址的值。那么d其实就是变量b的引用,实际上对d的操作就是在对b来进行操作。自然d的地址就是b的地址,d的值就是b的值。

其实,在更加复杂的函数中,如果想对函数的参数进行操作,但是又需要返回多个参数值时,可以将参数设置为引用,这样函数方法里面对参数的操作都会被保留带出函数体。

身边没电脑,例子都是百度上面的,也比较简单,之前对这块理解的不是很透彻。

可能有理解不对的地方,欢迎大佬们指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值