目录
大家都知道,在函数中参数分为实参和形参(参看本篇文章)https://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;
}
本程序需要在命令行窗口后面加上参数,才可以运行
谢谢