我是一个机械工程专业的学生,正在学习C语言,所以我的问题不是关于如何帮助编码,而是关于如何理解程序中的动作逻辑(因为这是我将要进行的测试)。
这篇文章来自x1c 0d1x首先我假设循环将在退出括号之前检查“n>0”的条件,因此将检查内部的静态int。但是相反,它将首先退出}括号,然后进行检查,这意味着我超出了静态int范围,并且int将始终为3,因为递减将只影响静态int。
tl;dr-
我的问题是,我该如何解释这种行为?是否有一个适当的解释,为什么会发生这种顺序,以便我能够使用该逻辑来理解使用该逻辑的不同代码片段的行为?
提前致谢
2条答案
按热度按时间z9zf31ra1#
在
foo
中有两个名为n
的不同变量。第一个是参数n
,它是由调用方传入的。第二个是循环体内部的静态声明。while
测试中的n
指的是参数。循环体中的静态n
仅在循环体执行时才在作用域中,而在对循环测试求值时永远不在作用域中,因此循环永远不会退出。如果在
n
小于或等于零的情况下调用foo
,则循环将立即退出,函数将返回x
。否则,如果n
大于零,则进入无限循环。循环体内的静态n
对循环测试没有影响。cetgtptt2#
我想你要说的是“变量阴影”
当程序中有多个同名变量时,就会发生变量隐藏。
示例如下:
字符串
这里的输出将是:
型
因为
main
中的局部变量x
隐藏了全局变量x
bar
中的局部变量x
隐藏了全局变量x
在给定的(块)作用域中,变量
x
的最后一个定义决定了使用哪个x
变量。在您的程序中,
while
主体中的int static n
变量隐藏了foo
的int n
变量(又名参数)。换句话说,在while
体内部,n
引用int static n
变量,在while
体外部,n
引用int n
变量/函数参数。你可以在这里阅读更多:https://en.wikipedia.org/wiki/Variable_shadowing#:~:text= In%20computer%20programming%2C%20variable%20shadowing,is%20known%20as%20name%20masking.