C 為什麼要規定對所有用到的變數要先定義後使用,這樣做有什麼好處

時間 2021-08-16 12:11:43

1樓:

規定“所有用到的變數要先定義後使用”,編譯器處理起來比較方便,不會有歧義。

因為 c++ 裡面,相同名字的變數在【不同的作用域】裡面,是可以重複宣告的。

注:每一對"{}"就是一個作用域。

比如下面的程式是可以編譯通過的:

#include

using namespace std;

int main(int argc, char *argv)

// 作用域 1 開始 }}

return 0;

}輸出結果為:12

34如果【沒有】規定“所有用到的變數要先定義後使用”,上面的程式會怎麼樣呢?

那麼上面這個程式就亂套了。因為可以先使用,再定義,

輸出語句1~4 就不知道自己該用哪個變數 a 了(這裡有4個不同的 a)。

因為不需要“先定義,後使用”,輸出語句1~4可以使用定義在任何地方的哪個變數 a 。

這樣,編譯器就無法確定,也就無法編譯了。

如果規定“所有用到的變數要先定義後使用”,上面的程式會怎麼樣呢?

那麼上面這個程式可以正常執行:

1)在輸出語句1的位置為止,只有【作用域 1 】定義了一個 a : int a=1 ,因此輸出 1 。

2)在輸出語句2的位置為止,【作用域 1 】和【作用域 2】分別定義了一個 a :

int a=1 ;

int a=2 ;

根據就近原則,使用最內層作用域的 a ,【作用域 2】裡面的 a ,輸出 2 ;

3)在輸出語句3的位置為止,【作用域 1 】【作用域 2】和【作用域 3】分別定義了一個 a :

int a=1 ;

int a=2 ;

int a=3 ;

根據就近原則,使用最內層作用域的 a ,【作用域 3】裡面的 a ,輸出 3 ;

同理可以分析輸出語句4。

這就是為什麼規定“所有用到的變數要先定義後使用”的原因之一吧。

2樓:匿名使用者

比如函式裡面的變數,必須要先定義了,編譯器才能為你分配足夠的棧空間存放這些變數以備後續使用。

3樓:匿名使用者

c/c++可以用來開發系統軟體 系統底層哪怕錯一個位元組 也會引起系統崩潰 這樣可方便編譯器進行型別檢查 防止出錯

4樓:匿名使用者

有什麼好處不清楚,壞處是變數不定義根本就沒法使用。

5樓:匿名使用者

記憶體的使用方法就是“先申請後使用”。在定義變數的過程中會為你的變數分配記憶體

6樓:匿名使用者

就好像你開車(車是沒油的),你是先加上油再開呢還是開完了再加油

c語言中為什麼printf輸出變數值的時候不要加地址符

聽不清啊 這是因為使用c語言定義的標準函式,c語言開發時就這麼規定的,沒有太多的為什麼 當初開發c語言的時候也可以不這麼寫 printf輸出變數值的時候不要加地址符 而scanf中卻要加上。我們使用的時候記住它,就行了。有時也有特例 陣列名本身就代表地址,就可以不用加取地址符 了 可以不加,加了也不...

C語言中的指標為什麼會改變變數的值

電腦科學中,指標 pointer 是程式語言中的一個物件,利用地址,它的值直接指向 points to 存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為 指標 意思是通過它能找到以它為地址的記憶體單元。簡而言之,指標儲存的是記憶體...

在C語言中,為什麼定義變數的時候總是初始化為0呢?該怎麼理解

符潔愚媚 因為變數是可以變動的,定義一個變數不初始化時,變數會是一個隨機數,進行計算了的時候,就會引用那個隨機數進行計算,會有誤差。 如果全域性變數在定義時不初始化則初始值是0,如果區域性變數在定義時不初始化則初始值是不確定的。 沒字天書 誰說總是初始化0的,全域性變數和靜態變數會,區域性變數不一定...