来源于:https://zhuanlan.zhihu.com/p/165612703
一、为什么做这种区分?
这里的参数指的是形参列表里面的参数。外部调用函数的时候通过形参列表把参数传给函数,函数再通过返回值拿到想要的结果。
但是当一个函数想要再内部处理多个数据并返回多个数据时,仅仅一个返回值就不够用了。那么此时返回值大多只有检验程序是否正常执行的作用,比如main函数的 return 0;
这时函数的输入(给函数本身的)输出(需要返回给使用者的)就都要靠参数来完成了。输出型参数就是让函数内部把数据输出到函数外部的。
#include<iostream>
using namespace std;
int add_3(size_t num1, size_t *num2) {
int temp = num1 + 3;
if (temp >= 3) {
//num2作为输出参数,num1是输入参数
*num2 = temp;
return 0;
}
else {
return -1;
}
}
int main() {
size_t a = 0, b = 0;
int c = add_3(a, &b);
if (c == 0) {
cout<<"成功相加"<<endl;
}
else if (c == -1) {
cout << "出错了" << endl;
}
cout << "a+3的结果是" << b << endl;
return 0;
}
二、怎么区分形参列表里面是输入型参数还是输出型参数?·
形参列表里面普通变量一定为输入型参数,普通变量传递向函数外部的方式只有两种:
- 全局变量,但是全局变量风险太大而且会对代码的可读性造成影响,所以一般不用。
- 返回值,只能返回一个,可以直接把普通变量传递出去。但是外部需要用新开的空间来接。
形参列表里面的指针型变量需要分开来看:
**1.作为输入:**作为输入的指针型变量在函数内部是不会进行修改的,所以一般加const
2.作为输出:通常这个形参是指针型且没有加const,代表外部需要函数处理这个指针所指的变量
char *strcpy(char *desc , const char *src);
//表示将源文件(src指向的文件)拷贝到目标地址(desc指向的文件)
另注:const char *src不是说src指针本身不可变,而是说src所指向的元素是不可变的。