亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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;

}


正在回答

3 回答

搞錯問題了,重新回答一下。

還有你搞錯了,輸出50那個代碼是if語句的輸出,不是fn1()的輸出。


你這把int x= 10; 放到了主函數調用無參函數fn1()前面,


無參函數fn1(),不論你在main函數中哪個位置定義int x = 10;

無參函數fn1()里面運行的x的值都是使用全局變量定義的 int x=77的值。所以fn1() = 77.


0 回復 有任何疑惑可以回復我~

因為被覆蓋住了,

代碼運行,

第一第二行后得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語句......

0 回復 有任何疑惑可以回復我~

本節應該定義三個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。


1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

int x =10在這個位置為什么fn1()輸出的不是10而是50

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號