int x =10在這個位置為什么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語句內, x=%d\n", x);? ? ? ?
? ? }
? ? printf("main方法內, x=%d\n", x); int x = 10;
? ? fn1();
? ? return 0;
}
2024-08-23
搞錯問題了,重新回答一下。
還有你搞錯了,輸出50那個代碼是if語句的輸出,不是fn1()的輸出。
你這把int x= 10; 放到了主函數調用無參函數fn1()前面,
無參函數fn1(),不論你在main函數中哪個位置定義int x = 10;
無參函數fn1()里面運行的x的值都是使用全局變量定義的 int x=77的值。所以fn1() = 77.
2024-08-23
因為被覆蓋住了,
代碼運行,
第一第二行后得x=77
然后運行到主函數 int main()?
接著運行到if判斷語句,現在x=77, 77>0,所以進入if語句
進入if語句后,x=100,重新給x賦值了100,覆蓋掉前面的77了,所以現在x=100
接著運行下一個? x /= 2? ,即 x=x/2? ,? x=100/2=50,計算完成后x的值為50了;
下一句就是輸出語句了,所以第一句輸出“if語句內,x=50”.
接著退出了if語句......
2024-02-22
本節應該定義三個x,即要用三次int x。
第一個int x=77是全局變量,作用范圍是整個程序。
第二個int x=10是局部變量,作用于整個函數main()。
第三個int x=100也是局部變量,但僅作用于if復合語句范圍內。
三個x作用范圍依次減小,范圍大的可以作用于范圍小的,范圍小的不能作用于范圍大的,且優先使用范圍小的。
你在if語句中沒有定義第三個x,而是直接使用x,且第二個x定義在if語句之后,所以你的if語句中使用的是第一個x。你之后定義了第二個x=10,此時你的第一個x=50,而fn1()在main函數之外,使用的是第一個x=50。