【C++入门笔记】传值、传址和引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38371360/article/details/85802232

默认情况下,参数只能以值传递的方式给函数。

这句话的理解是,被传递到函数的只是变量的值,永远不会是变量本身。

下面来看一段示例代码:

#include <iostream>

void changeAge( int age, int newAge );

 
main()
{
	int age = 24;
	std::cout << "My age is " << age << "\n";
	
	changeAge( age, age+1 );
	
	std::cout << "Now my age is " << age << "\n";
}

void changeAge( int age, int newAge )
{
	age = newAge;
	std::cout << "In this , my age is " << age << "\n";
}

输出结果如下所示:

My age is 24
In this , my age is 25
Now my age is 24

可以看出, main函数中的age和changeAge中的age是不同的,虽说名字一样,但完全不一样。如果要通过changeAge来改变main函数的age中的话该如何修改呢?

绕开“值传递”问题的第一种方法是向函数传递变量的地址取代它的值。我们说C语言的强大,很大部分就在于它的灵活,而它的灵活很大部分就是可以利用指针进行委婉地修改。

想要获取某个变量的地址只需要在它前面加上一个“取地址”操作符(&)就可以了。

将上述程序修改如下:

#include <iostream>

void changeAge( int *age, int newAge );

// 如果想要实现计划功能,需要怎么改?
 
main()
{
	int age = 24;
	std::cout << "My age is " << age << "\n";
	
	changeAge( &age, age+1 );
	
	std::cout << "Now my age is " << age << "\n";
}

void changeAge( int *age, int newAge )
{
	*age = newAge;
	std::cout << "In this , my age is " << *age << "\n";
}

结果是:

My age is 24
In this , my age is 25
Now my age is 25

注意:如果传过去的是地址,在函数中必须要通过*进行对指针的解引用,除非你有其他的用途。

下面来看一下引用传递的概念。设想,如果事先知道某个函数的参数只能接受一个地址,能不能使用某种约定使得在调用该函数时不需要使用指针的语法呢?

于是乎,以引用传递方式传递输入方式的概念因此而产生了。其实他跟我们地址的传递是一样的,都是把地址传递给函数,但语法不同,更加容易使用了。

#include <iostream>

void swap( int &x, int &y );//声明,这里我要接受的是一个地址

main()
{
	int x, y;
	
	std::cout << "请输入两个不同的值:";	
	std::cin >> x >> y;
	
	swap( x, y );
	
	std::cout << "调换后输出:" << x << ' ' << y << "\n\n"; 
}

void swap( int &x, int &y )
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}

未完待续……

猜你喜欢

转载自blog.csdn.net/weixin_38371360/article/details/85802232