关于C语言函数形参(全局变量)的几点说明

最近在写队列函数时,在调试过程中碰到形参的一些问题,作为心得写在这边。
1.函数的形参属于局部变量,仅在定义的函数内有效,函数返回后失效。

2.当在一个函数(比如main函数)内调用另外一个函数时,例如:

void fun(unsigned char x)
{
	x = x+1;
}

int main(void)
{
	unsigned char data = 0x10;
	
	while(1)
	{
		fun(data);
		uartWrite (UART0, data, sizeof(data), NULL);
	}
}

运行结果:0x10

虽然main函数调用fun函数,但是运算之后没有返回值,也就是data的值没有更新,还是0x10。
因此如果要通过一个函数改变某个变量的值,该函数必须要有返回值。将上述代码稍作修改:

unsigned char fun(unsigned char x)
{
	x = x+1;
	retrun x;
}

int main(void)
{
	unsigned char data = 10;
	
	while(1)
	{
		data = fun(data);
		uartWrite (UART0, data, sizeof(data), NULL);
	}
}

运行结果:0x11

3.当全局变量作为形参输入函数进行运算时,分如下几种情况:
(1)函数无返回值

unsigned char data = 10;

void fun(unsigned char x)
{
	x = x+1;
}

int main(void)
{
	
	while(1)
	{
		fun(data);
		uartWrite (UART0, data, sizeof(data), NULL);
	}
}

运算结果:0x10
由此可见,当全局变量作为参数输入函数进行运算时,其本身的值并未改变。
也就是说,全局变量作为形参输入函数进行运算时,其作用相当于局部变量,函数返回后失效。

(2)函数有返回值

unsigned char data = 10;

unsigned char fun(unsigned char x)
{
	x = x+1;
	retrun x;
}

int main(void)
{
	
	while(1)
	{
		data = fun(data);
		uartWrite (UART0, data, sizeof(data), NULL);
	}
}

运算结果:0x11
其实,这边全局变量data在fun函数内部的作用与例(1)一样,不过它将计算结果赋值于data,因此打印出来的data值为0x11。

(3)全局变量直接用于函数内部,不作为形参

unsigned char data = 10;

void fun()
{
	data = data+1;
}

int main(void)
{
	
	while(1)
	{
		fun();
		uartWrite (UART0, data, sizeof(data), NULL);
	}
}

运算结果:0x11
全局变量的作用域为整个程序,只要不作为函数形参输入,它的计算值会实时更新。因此这边输出0x11。

文章对局部变量和全局变量作为形参输入进行了分类讨论,希望对相关同行有一定帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值