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的值。




目录
相关文章
|
7月前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
97 9
|
5月前
|
NoSQL API Redis
c++开发redis module问题之为什么在使用RedisModule_GetApi之前要通过((void**)ctx)[0]这种方式获取其地址
c++开发redis module问题之为什么在使用RedisModule_GetApi之前要通过((void**)ctx)[0]这种方式获取其地址
|
6月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
6月前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
6月前
|
C++
C++数组(定义、遍历、长度、地址、最大值、逆置、冒泡排序)
C++数组(定义、遍历、长度、地址、最大值、逆置、冒泡排序)
|
6月前
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
45 0
|
7月前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
50 2
|
7月前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载(1)
【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载
|
7月前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载