函数传递参数的几种类型

一、参数为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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ypeijasd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值