黑馬程式設計師 C語言中變數作用域問題

2021-06-21 03:10:03 字數 1844 閱讀 4686

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

示例**一:

#include int main()

printf("score=%d\n", score);

}printf("score=%d\n", score);

return 0;

}

輸出結果:score=50

score=100

變數的作用域:從定義變數的那一行**開始,一直到所在的**塊結束。**塊結束時,**塊內所定義的變數(儲存空間)將被**,所以第二個printf

函式的輸出結果為:

score=100

,而不是

score=200

。在**塊

中,由於該**塊中沒有定義

score

變數,所以在進行賦值操作時,會到該**塊外面(上一層**塊中)找

score

變數,並進行賦值操作。所以,此時上一層**塊中的

score

變數的值已經變為

50,而不是原來的

200了。又由於就近原則,第乙個

printf

函式訪問

score

變數時,就在其所在的**塊中找

score

變數。而此時該**塊中

score

的值為50

,所以第乙個

printf

函式的輸出結果為:

score=50

。若把**塊

改為:,此時不會修改上一層**塊中

score

的值,因為該**塊內定義了自己的

score

變數,所以賦值操作只會對該**塊內的

score

起作用,該**塊結束時,其中的

score

變數會被**,此時,第乙個

printf

函式的輸出結果將會變為:

score=200。

示例**二:

#include int main()

printf ("%d\n", a);

return 0;

}

此時編譯器會報錯,因為變數a

的作用域只限於其所在的**塊內部,該**塊結束時,變數

a將會被**。所以

printf

函式訪問不到變數

a,編譯報錯。

示例**三:

#include int main()

此時編譯器也會報錯,因為此時變數a

的作用域不明確,編譯器不知道變數

a的作用域,會直接報錯,應將

if後面的**用大括號包住。

(如果在

if語句後面定義新的變數,必須用大括號。)

示例**四:

#include int main()

return 0;

}

這段**編譯時同樣會報錯,犯的錯誤與示例**三一樣,都是變數作用域不明確,**中變數sum

與變數minus

的作用域不明確,應將

case

後面的**用大括號包住。(如果要在

case

後面定義新的變數,必須用大括號

{}包住。)

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

06 黑馬程式設計師 點語法 成員變數作用域

student stu student new stu serage 100 int age stu age stu.age 100 int age str.age a.點語法的本質是方法呼叫 b.當使用點語法時,編譯器會自動展開成相應的方法 stu.age 10 展開為 stu setage 10...

黑馬程式設計師 c語言中的排序演算法

1.冒泡演算法 include stdio.h void main n 10 for i 0 i for j 0 j if a j a j 1 當後面的值比前面的值小時,兩個值互換 for i 0 i printf d a i 2.選擇排序法 include define n 20 定義n 20 v...

黑馬程式設計師 C語言中的指標 4

使用字串指標變數與字元陣列的區別 用字元陣列和字元指標變數都可實現字串的儲存和運算。但是兩者是有區別的。在使用時應注意以下幾個問題 1.字串指標變數本身是乙個變數,用於存放字串的首位址。而字串本身是存放在以該首位址為首的一塊連續的記憶體空間中並以 0 作為串的結束。字元陣列是由於若干個陣列元素組成的...