传值,传地址和传引用

本文深入探讨了C++中指针与引用传递的区别,通过实例解释了如何使用指针和引用在函数间改变变量的值,以及如何实现变量交换,展示了C++语言的强大功能。
#if(0)
#include <iostream>
void changeage(int age,int newage);
using namespace std;
int main(int argc, char *argv[])
{
	int age =24;
	
	cout <<"MY age is"<<age<<endl;
	changeage(age,age+1);
	
	cout<<"Now my age is"<<age <<endl;
	return 0;
}
void changeage(int age,int newage)
{
	age = newage;
	cout<<"In this , my age is"<<age<<endl;
}
/*
MY age is24
In this , my age is25
Now my age is24
请按任意键继续. . .
*/
#endif
#if(1)
#include <iostream>
void changeage(int *age,int newage);
using namespace std;
int main(int argc, char *argv[])
{
	int age =24;
	
	int *p;
	p= &age;
	cout <<"MY age is"<<age<<endl;
	changeage(p,age+1);
	
	cout<<"Now my age is"<<age <<endl;
	return 0;
}
void changeage(int *age,int newage)
{
	*age = newage;
	cout<<"In this , my age is"<<*age<<endl;
}
#endif

上面的输出 可以看出, 如果你要跨函数改变内存的值 ,那么需要传递的是地址 
 


 
  1. 下面请看 swap函数的使用
  1: #if(1)
  5: int main(int argc, char *argv[])
  6: {
  7:   int x,y;
  8:   
  9:   cout <<"请输入两个不同的值";
 10:   cin>>x>>y;
 11:   
 12:   swap(&x,&y);
 13:   
 14:   cout<<"调换后输出:"<<x<<' '<<y<<endl;
 15:    
 16:   return 0;
 17: }
 18: 
 19: void swap(int *x,int *y)
 20: {
 21:   int temp;
 22:   temp =*x;
 23:   *x = *y;
 24:   *y  = temp;
 25: }
 26: 
 27: #endif
 28: 

另一种 不需要中介的 互换方案:swap2

提示 使用  异或 。

引用传递:传址在我们呢看来已经很不错了,不过c++语言的大神们在完善的过程中完善了地址这个概念

设想 如果事先就知道某个函数的参数只能接受一个地址,能不能使用某种约定使得调用该函数时

不需要使用指针的语法呢?

于是乎引用 传递方式传递输入方式的概念因此而产生了。

  1: #include <iostream>
  2: void swap(int &x,int &y);
//
  3: using namespace std;
  4: int main(int argc, char *argv[])
  5: {
  6: 	int x,y;	
  7: 	cout <<"请输入两个不同的值";
  8: 	cin>>x>>y;	
  9: 	swap(x,y);	
 10: 	cout<<"调换后输出:"<<x<<' '<<y<<endl;
 11: 	 
 12: 	return 0;
 13: }
 14: 
 15: void swap(int &x,int &y)
 16: {
 17: 	int temp;
 18: 	temp =x;
 19: 	x = y;
 20: 	y  = temp;
 21: }

转载于:https://www.cnblogs.com/yoyov5123/archive/2013/02/28/2937827.html

在C语言中,主要有传地址两种参数递方式,而C++才有引用的概念,下面详细介绍它们的区别。 ### 是指函数的参数以变量方式入函数时,实际入的是这个变量的拷贝,而不是变量本身。函数内部对参数的修改不会影响到函数外部的实参。示例代码如下: ```c #include <stdio.h> void func(int x) { x = 2 * x; printf("func函数中x=%d\n", x); } int main(void) { int x = 5; func(x); printf("主函数中x=%d\n", x); return 0; } ``` 在上述代码中,`func` 函数接收的是 `x` 的拷贝,在函数内部对其修改不会影响到 `main` 函数中的 `x` 的。这表明,当函数调用时,实参给形参,形参是实参的一份临时拷贝,对形参的修改不会影响实参[^3][^5]。 ### 传地址 传地址也称为递的是变量的地,本质上递的还是,只不过这个是一个地。函数内部可以通过这个地访问修改函数外部的实参。示例代码如下: ```c #include <stdio.h> void fun(int *a) { *a = 4; } int main() { int a = 3; fun(&a); printf("a = %d\n", a); return 0; } ``` 在这个例子中,`fun` 函数接收的是变量 `a` 的地,通过解引用操作 `*a` 可以修改 `main` 函数中 `a` 的[^2]。 ### 引用C++概念) 在C语言中没有引用的概念,在C++中,引用是通过在函数参数前加 `&` 符号实现的。引用递的是变量本身,而不是的拷贝或地。可以直接在函数内部修改函数外部的实参。示例代码如下: ```cpp #include <iostream> void fun(int &b) { b = 4; } int main() { int b = 3; fun(b); std::cout << "b = " << b << std::endl; return 0; } ``` 在C++中,`fun` 函数接收的是变量 `b` 的引用,对 `b` 的修改会直接影响到 `main` 函数中的 `b` 的[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值