快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言子函数中同名变量 c语言函数名和变量同名

C语言程序解释

答案是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。

C语言函数变量重复定义

是这样的,同一个函数内定义的每个变量名(局部变量)是唯一的,其内容的改变与本函数外的任何变量无关。

C语言,关于局部变量重名的问题。

对于这道题你可以由外向内这样分。

单个文件中分为3个级别的空间:

函数外一个空间:全局变量,具有静态存储,从定义出到这个文件结尾范围的函数可以使用

函数内:自动变量,离开函数就释放

复合体(大括号内):自动变量,离开大括号就自动释放

说明:大致上就是这3部分,内和外有同名的,内将屏蔽外部变量。但是在同一级上的同名将导致出现多次定义的错误

多个文件涉及:只能有一个定义的外部链接

(c++的话还有类和名称空间)

你的第一个例子2个x的定义都是在main函数内的同一级上,重复定义。

第二个例子int x=3只能在大括号中生存,而且屏蔽了x=1的那个定义。

C语言子模块中函数入口参数名可以跟全局变量名(结构体变量)一样吗

可以同名。

形参

作用域

只在它所在的函数中,

在函数ili9481_Set_IO_PORT中ctl_inf是形参,

全局变量

ctl_inf被屏蔽。

C语言中调用的函数不可以和main函数中的定义的常量变量名同名?

是的!不可以,不光C不行,C++也不行,我认为其它语言也不可以,如果函数和变量同名在编译的时候如何判断用的是函数还是变量呢?PS:函数在不写函数调用符号时指的是函数的指针,我想这你也应该清楚。


网页名称:c语言子函数中同名变量 c语言函数名和变量同名
文章链接:http://6mz.cn/article/dodogsd.html

其他资讯