关于C语言函数形参(全局变量)的几点说明 |
您所在的位置:网站首页 › c语言函数参数是数组的吗 › 关于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。 文章对局部变量和全局变量作为形参输入进行了分类讨论,希望对相关同行有一定帮助。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |