C语言作用域问题
答案:6 悬赏:50 手机版
解决时间 2021-02-15 00:07
- 提问者网友:相思似海深
- 2021-02-14 09:20
#include main(){int i=5;{i++;} printf("%d",i);} 块总用域不是只在花括号内的吗,i++只作用于内层花括号,i++只在内层花括号中实现,最后结果应该是5,为什么最后结果是6呢
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-02-14 10:33
你这是没有明白作用域的真正含义,首先,谈作用域,其对象是变量,比如i,a,b。而不是表达式,比如你说的i++。其次,你在main中定义了变量i,那么在整个main中,它都是有效的,除非你在内存花括号中重新定义i,那么在花括号中第一个i会暂时失效,执行完花括号中的语句后,第一个i才恢复有效。对表达式,我们关心的是其是否被执行。比如你给的例子中,表达式i++外面的花括号有没有都一样,i++都会被执行。
全部回答
- 1楼网友:痴妹与他
- 2021-02-14 15:34
其实只是按顺序执行的语句,i++的部分,只是相当于简短的运算表达式,没有域的问题。
- 2楼网友:从此江山别
- 2021-02-14 14:52
i++ 相当于 i=i+1;所以i的结果是6。你的花括号有没有都是一样的。
- 3楼网友:笑迎怀羞
- 2021-02-14 13:59
你加不加花括号是一个样子的,C语言定义,一条语句以;号结束,而{}的意思是,在{}内不管有多少条语句,都计为一条语句,称为复合语句。而你说到的作用域这个问题,你的理解有误,作用域指的是在一个函数内,而不是在一条语句内。不管你加不加{},i++都执行,并且i+1。
要谈到作用域的话,我给你举个例子:
#include
void zuoyongyu(int i)
{
i++;
}
void main()
{
int i=5;
zuoyongyu(i);
printf("%d",i);
}
这样子的输出结果就是5,因为一个变量的作用域只限定在一个函数内,函数zuoyongyu的变量i自增变为6,并不影响到main函数中的i的值。
希望能帮助到你。
- 4楼网友:鱼忧
- 2021-02-14 12:41
好吧 我来。 前面的那个int change(int number) 是函数原型的声明。因为你在main函数里面用到了这个。如果你不想用。你就把后面的那个 int change 这个函数和main 函数换一个位置就不要开头这个了。
result = change (number) 就是把 change()函数的返回值传递个 result
- 5楼网友:低血压的长颈鹿
- 2021-02-14 11:04
我的理解哈:
这是个变量作用域问题:当你的花括号内重新定义了一个 变量 以后,这个变量就在花括号之内有效,出了花括号这个变量就没用了。比如,把你的程序改成:
#include
main() {
int i=5;
{int i=5;
i++;}
printf("%d",i);
}
实验一下,最后的i得5。如果你把printf改到花括号内,i就得6。这说明花括号内的变量i是独立于括号外定义的i的。
当你花括号内没有定义与括号外变量重名的变量时,所有变量继承。这也就是说在花括号里,也可以对于其他变量操作,而只是新定义的重名变量的作用域在你的花括号之内。你来个i++,i自然加一了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯