一、参数为int、double、char等变量
(1)调用函数后,不修改实参的值
#include <bits/stdc++.h>
using namespace std;
int a;
char ch;
//asd 和 c 是 形参
//形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
//因此,形参只在函数内部有效。
//函数调用结束返回主调用函数后则不能再使用该形参变量。
//当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,
//他们在内存中位于不同的位置,形参将实参的内容复制一份,
//在该函数运行结束的时候形参被释放,而实参内容不会改变。
//如果想要在函数中修改实参的值, 定义形参时前面需要加引用, 例如 int &asd
void fun(int asd, char c)
{
//asd 和 c 是形参
//形参出现在函数定义中, 在整个函数体(array)内都可以使用, 离开该函数则不能使用。
printf("%d %c\n", asd, c);
//里面改变了asd 和 c的值
asd*=2;
c+=1;
printf("%d %c\n", asd, c);
}
int main()
{
scanf("%d %c", &a, &ch);
//a和ch叫实参, 实参出现在主调函数中
fun(a, ch);
//外面输出发现 a 和 ch的值没有被改变
printf("%d %c", a, ch);
//形参出现在函数定义中, 在整个函数体(array)内都可以使用, 离开该函数则不能使用。
//因此下面这一行输出操作会导致编译错误
//printf("%d %c", asd, c);
return 0;
}
上面代码输入
10 a
输出为
10 a
20 b
10 a
其中第一行是在函数中输出的形参的值,对应代码中第19行
第二行是在函数中,形参值发生变化,输出的形参值, 对应代码中第23行
第三行是在主函数中,输出的实参值, 对应代码中第31行,因为函数只改变了形参的值,没有改变实参的值,所以和输入一样。
(2)调用函数后,修改实参的值
#include <bits/stdc++.h>
using namespace std;
int a;
char ch;
//asd 和 c 是 形参
//形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
//因此,形参只在函数内部有效。
//函数调用结束返回主调用函数后则不能再使用该形参变量。
//当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,
//他们在内存中位于不同的位置,形参将实参的内容复制一份,
//在该函数运行结束的时候形参被释放,而实参内容不会改变。
//如果想要在函数中修改实参的值, 定义形参时前面需要加引用, 例如 int &asd
void fun(int &asd, char &c) {
//asd 和 c 是形参
//形参出现在函数定义中, 在整个函数体(array)内都可以使用, 离开该函数则不能使用。
printf("%d %c\n", asd, c);
//里面改变了asd 和 c的值
asd*=2;
c+=1;
printf("%d %c\n", asd, c);
}
int main()
{
scanf("%d %c", &a, &ch);
//a和ch叫实参, 实参出现在主调函数中
fun(a, ch);
//外面输出发现 a 和 ch的值没有被改变
printf("%d %c", a, ch);
//形参出现在函数定义中, 在整个函数体(array)内都可以使用, 离开该函数则不能使用。
//因此下面这一行输出操作会导致编译错误
//printf("%d %c", asd, c);
return 0;
}
上面代码输入
10 a
输出为
10 a
20 b
20 b
其中第一行是在函数中输出的形参的值,对应代码中第18行
第二行是在函数中,形参值发生变化,输出的形参值, 对应代码中第22行
第三行是在主函数中,输出的实参值, 对应代码中第30行,因为函数定义形参时使用引用&,在函数中会改变实参的值,所以出发生了变化。
二、参数为数组
#include <bits/stdc++.h>
using namespace std;
int n, a[100];
void array(int *t, int length)
{
for(int i=1; i<=length; ++i){
printf("%d ", t[i]);
t[i]*=2;
}
printf("\n");
}
int main()
{
scanf("%d", &n);
//输入数组
for(int i=1; i<=n; ++i){
scanf("%d", &a[i]);
}
//调用函数
array(a, n);
//输出数组, 发现数组内容变了
for(int i=1; i<=n; ++i){
printf("%d ", a[i]);
}
return 0;
}