C++:传值与传地址

简介:     参数的传递方式有两种:传值和传地址。        传值 传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,各有各的存储空间,函数形参可以看做是函数的局部变量。

    参数的传递方式有两种:传值和传地址。

  

    传值

传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,各有各的存储空间,函数形参可以看做是函数的局部变量。如图:


传值的最大好处就是函数调用不会改变调用函数实参变量的内容,因为当实参的值传递给形参后,所进行的运算都是围绕形参进行的,没有实参的参与,所以,不会影响到实参的值,避免了一些不必要的副作用。


例如:

#include<iostream>
using namespace std;
void test(int);

int main()
{
	int a;
	a=1;

	test(a);
	cout<<"a="<<a<<endl;

	return 0;
}

void test(int i)
{
	i++;
	cout<<"i="<<i<<endl;
}


执行结果:





从结果可以看出,在调用过程中,当把实参a=1赋给了形参i后,i自加1,输出i=2;但是实际上并没有影响到实参a的值,调用完成之后,a的值还是1.




传地址



      学过二代语言的人可能都接触过对寄存器的操作,在一些底层的语言中,对数据的读取操作中,有很大一部分是直接对地址中的数据来读写的,在高级语言中传递址的方式来传递参数虽然是通过指针引用这些实现的,但是原理感觉还是通过数据的地址对数据进行操作的,这种操作时对数据的直接操作。

  例如:

 

		#include<iostream>
		using namespace std;
		void test(int * i);
		
		int main()
		{
			int a;
			a=1;
		
			test(&a);
			cout<<"a="<<a<<endl;
		
			return 0;
		}
		
		void test(int * i)
		{
			(* i)++;
			cout<<"i="<<(* i)<<endl;
		}

执行结果:

 

其中,将形参i定义成指针类型,在使用时,指向a的内容,当调用test时,直接了改变a的值。




目录
相关文章
|
IDE 编译器 开发工具
Dev C++下载地址和安装教程(图解版)
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
23771 0
Dev C++下载地址和安装教程(图解版)
|
3天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
30天前
|
网络协议 Linux C++
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
22 0
|
5月前
|
C语言 C++
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载(1)
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载
|
1月前
|
域名解析 C++
C++ Qt开发:QHostInfo主机地址查询组件
在Qt网络编程中,QHostInfo是一个强大而灵活的组件,用于获取有关主机的信息,包括主机名、IP地址和域名解析等。通过支持异步查询的机制,它能够在后台获取主机信息,避免阻塞主线程,同时通过信号-槽机制提供查询结果。其多主机查询、可靠的错误处理和与网络环境的适应性,使其成为处理网络应用中主机信息获取的理想选择。
36 6
C++ Qt开发:QHostInfo主机地址查询组件
|
2月前
|
编译器 C++
【c++】取地址及const取地址操作符重载
【c++】取地址及const取地址操作符重载
【c++】取地址及const取地址操作符重载
|
4月前
|
编译器 C++
【C++初阶】类和对象——操作符重载&&const成员函数&&取地址重载&&日期类的实现
上篇文章介绍了在C++的类六个成员函数中的三个,分别是构造函数、析构函数、拷贝构造函数,不知道大家有没有所收获,今天我们带来的是剩下的三个函数,以及结合这六个函数完成一个完整的日期类的实现,让我们开始今天的征程吧!
|
5月前
|
编译器 C++
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载(2)
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载(1)
|
5月前
|
C++
《C++避坑神器·十一》地址和地址的地址赋值问题
《C++避坑神器·十一》地址和地址的地址赋值问题
40 0
|
5月前
|
编译器 C++
【C++从0到王者】第五站:类和对象(中)const和取地址运算符重载
【C++从0到王者】第五站:类和对象(中)const和取地址运算符重载
39 0