C++函数参数传递详解

目录

第一种传递方式:按值传递

第二种传递方式:指针传递

第三种传递方式:引用传递

const参数

main()函数的参数



 

 

大家都知道,在函数中参数分为实参和形参(参看本篇文章)icon-default.png?t=M3K6https://mp.csdn.net/mp_blog/creation/editor/124362297现在我们来详细的看看这两者的区别和使用,简单的来说,形参就是一个可以操作的容器,实参就是里面的类容,而参数传递就是传递实参。

第一种传递方式:按值传递

对于基本类型的参数来说,按值传递就是简单的将实参的值赋给形参。

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

void bl(int intnum, float floatnum, string str)
{
	cout << "打印整数" << intnum << endl;
	cout << "打印浮点数" << floatnum << endl;
	cout << "打印字符串" << str << endl;
}


int main()
{
	int a = 5201314;
	float b = 1.0f;
	string str = "asjkdhaskjdl";
	bl(a, b, str);
	return 0;
}

运行结果

 在实例中分别取3种类型的参数传递,对于整型和浮点型来说就是简单的赋值,但是string是一种自定义对象,把它拷贝到形参时需要调用string重载的赋值运算符进行拷贝。

第二种传递方式:指针传递

指针传递实质上就是一种按值传递,只是将一般类型换为了指针,由于自定义的对象大小可能会很大,赋值拷贝就比较浪费时间,在这种情况下,指针的效率就非常的高。因为它只需要传递地址的大小的数据。

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

void bl(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << "a交换后的值为" << a << "交换后的b" << b << endl;
}

int main()
{
	int a = 520;
	int b = 1314;
	cout << "交换前的a" << a << "交换前的b" << b << endl;
	bl(a, b);
	cout << "交换后a" << a << "交换后b" << b << endl;
	return 0;
}

运行结果

 我们可以看到,在运行了bl函数后,形参a和b是交换成功的,但是为什么之后又没有交换成功了呐。这是因为形参本质上是作用域仅限于函数内部的局部变量,实参只是把值赋值给了形参,出来函数后作用域消失了,而实参还是原来的样式,用个例子来讲就是,一个人将一份文件复制了一份再放入原文件夹中,当修改复制文件的时候,原文件是不会改变的。下面我们来用指针来实现数字的交换。

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

void bl(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << "a交换后的值为" << *a << "交换后的b" << *b << endl;
}

int main()
{
	int a = 520;
	int b = 1314;
	cout << "交换前的a" << a << "交换前的b" << b << endl;
	bl(&a, &b);
	cout << "交换后a" << a << "交换后b" << b << endl;
	return 0;
}

运行结果

 在本次程序中,a和b就保留了交换,这是因为我们传递的是地址,在打印的时候编译器就是取地址中的值。还是举个例子这次员工放入文件夹的是一个小字条,上面记载这文件电子档的网盘链接,当文件发送给编译者时,工作人员就可以通过链接修改原文件了。

第三种传递方式:引用传递

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

void bl(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << "a交换后的值为" << a << "交换后的b" << b << endl;
}

int main()
{
	int a = 520;
	int b = 1314;
	cout << "交换前的a" << a << "交换前的b" << b << endl;
	bl(a, b);
	cout << "交换后a" << a << "交换后b" << b << endl;
	return 0;
}

在引用传递中就是把*改为&。比较简单。就不做过多的描述了。

const参数

我们在设计函数时首先要考虑的就是函数用来干什么后,我们就可以考虑函数的具体实现了,为了防止在实现函数的时候不能修改参数,我们可以使用const关键词修饰参数。

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

char bl(const string& str)
{
	//把下面一行设为注释就可以运行
	str[str.length() - 1] = 's';
	return str[str.length() - 1];
}

int main()
{
	string str = "hello";
	cout << "字符串最后一个字符为:" << bl(str) << endl;
	return 0;

}

在本例中由于函数修改了字符串中的字符,违反了const语句,编译器就会报错。

main()函数的参数

main()函数作为主函数,在前面参数列表都是空的,其实它是可以又参数的,有参数的main()函数是这样的int main(int  argc,char*argv[]),或者是int main(int  argc,**argv)

//函数参数传递
//作者:分解机226


#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
	int sum = 0;
	for (int i = 0; i < argc; i++)
	{
		sum += atoi(argv[i]);
	}
	cout << "输入所有数总和为:" << sum << endl;
	return 0;
}

本程序需要在命令行窗口后面加上参数,才可以运行

谢谢

 

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

分解机226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值