int x =10在這個(gè)位置為什么fn1()輸出的不是10而是50
#include <stdio.h>
int x = 77;
void fn1()
{
? ? printf("fn1(): x=%d\n", x);? ? ? ?
}
int main()
{
? ?
? ? if(x>0)
? ? {
? ? ? ? x = 100;
? ? ? ? x /= 2;
? ? ? ? printf("if語(yǔ)句內(nèi), x=%d\n", x);? ? ? ?
? ? }
? ? printf("main方法內(nèi), x=%d\n", x); int x = 10;
? ? fn1();
? ? return 0;
}
2024-08-23
搞錯(cuò)問(wèn)題了,重新回答一下。
還有你搞錯(cuò)了,輸出50那個(gè)代碼是if語(yǔ)句的輸出,不是fn1()的輸出。
你這把int x= 10; 放到了主函數(shù)調(diào)用無(wú)參函數(shù)fn1()前面,
無(wú)參函數(shù)fn1(),不論你在main函數(shù)中哪個(gè)位置定義int x = 10;
無(wú)參函數(shù)fn1()里面運(yùn)行的x的值都是使用全局變量定義的 int x=77的值。所以fn1() = 77.
2024-08-23
因?yàn)楸桓采w住了,
代碼運(yùn)行,
第一第二行后得x=77
然后運(yùn)行到主函數(shù) int main()?
接著運(yùn)行到if判斷語(yǔ)句,現(xiàn)在x=77, 77>0,所以進(jìn)入if語(yǔ)句
進(jìn)入if語(yǔ)句后,x=100,重新給x賦值了100,覆蓋掉前面的77了,所以現(xiàn)在x=100
接著運(yùn)行下一個(gè)? x /= 2? ,即 x=x/2? ,? x=100/2=50,計(jì)算完成后x的值為50了;
下一句就是輸出語(yǔ)句了,所以第一句輸出“if語(yǔ)句內(nèi),x=50”.
接著退出了if語(yǔ)句......
2024-02-22
本節(jié)應(yīng)該定義三個(gè)x,即要用三次int x。
第一個(gè)int x=77是全局變量,作用范圍是整個(gè)程序。
第二個(gè)int x=10是局部變量,作用于整個(gè)函數(shù)main()。
第三個(gè)int x=100也是局部變量,但僅作用于if復(fù)合語(yǔ)句范圍內(nèi)。
三個(gè)x作用范圍依次減小,范圍大的可以作用于范圍小的,范圍小的不能作用于范圍大的,且優(yōu)先使用范圍小的。
你在if語(yǔ)句中沒(méi)有定義第三個(gè)x,而是直接使用x,且第二個(gè)x定義在if語(yǔ)句之后,所以你的if語(yǔ)句中使用的是第一個(gè)x。你之后定義了第二個(gè)x=10,此時(shí)你的第一個(gè)x=50,而fn1()在main函數(shù)之外,使用的是第一個(gè)x=50。