答案是3 2 3 1 2
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的荣县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
这里面涉及到几个知识点:
在子函数中用static修饰的变量,只会进行一次初始化,即 static int b=3; 只会在第一次调用f函数时才会执行,后面的调用都直接跳过这句话。
在子函数中,如果局部变量名和全局变量名重名,默认优先使用局部变量
在子函数中的局部变量只存在于子函数里面,调用完子函数后,内部的局部变量会被全部销毁
全局变量如果没有被初始化,默认为0。
因此,对于这道题,第一次调用f(++a)时,传入的值为1(因为a先加1,再传入值),此时的全局变量a变为1了。然后进入子函数里面,将传入的1赋值给局部变量a,局部变量a等于1。子函数里面的a与全局变量a重名,因此优先使用局部变量a,a+=2;实际上是局部变量的a,全局变量a没有任何变化。然后初始化b=3。执行--b后,b=2。因此首先输出3,2。
第二次调用f(a++)函数时,传入的值为1,然后再将全局变量a加一,此时的全局变量a变为2了。然后进入子函数里面,将传入的1赋值给局部变量a,局部变量a等于1。然后跳过b的初始化,局部变量的a+=2,所以a=3,执行--b后,b=1。因此首先输出3,1。
最后的printf输出的时全局变量a,为2。
是这样的,同一个函数内定义的每个变量名(局部变量)是唯一的,其内容的改变与本函数外的任何变量无关。
对于这道题你可以由外向内这样分。
单个文件中分为3个级别的空间:
函数外一个空间:全局变量,具有静态存储,从定义出到这个文件结尾范围的函数可以使用
函数内:自动变量,离开函数就释放
复合体(大括号内):自动变量,离开大括号就自动释放
说明:大致上就是这3部分,内和外有同名的,内将屏蔽外部变量。但是在同一级上的同名将导致出现多次定义的错误
多个文件涉及:只能有一个定义的外部链接
(c++的话还有类和名称空间)
你的第一个例子2个x的定义都是在main函数内的同一级上,重复定义。
第二个例子int x=3只能在大括号中生存,而且屏蔽了x=1的那个定义。
可以同名。
形参
的
作用域
只在它所在的函数中,
在函数ili9481_Set_IO_PORT中ctl_inf是形参,
全局变量
ctl_inf被屏蔽。
是的!不可以,不光C不行,C++也不行,我认为其它语言也不可以,如果函数和变量同名在编译的时候如何判断用的是函数还是变量呢?PS:函数在不写函数调用符号时指的是函数的指针,我想这你也应该清楚。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款