為什麼C語言設計的時候定義不給初值?

時間 2021-06-06 08:58:20

1樓:涇渭漳淮

①c語言變數有初值,只不過初值不確定(或者說可能是髒值),如果髒值沒有意義的話,賦值為0就一定有意義嗎?也未必。②賦值有效能開銷(不管是你自己賦值還是編譯器幫你賦乙個初值),追求效能的c語言顯然不會偷偷幹這種事。

2樓:

這種設計,是有道理的;因為,這樣有助於,讓你形成良好的程式設計習慣。

對新建的變數,進行初始化,是乙個必不可少的步驟;C語言,這樣設計,就是為了讓你看到,如果不初始化,會發生什麼情況。

這就好比,你在做實驗之前,先把實驗台上的器材,按使用順序擺好位置;而不是,等別人幫你擺,那樣只會讓你變懶。

在程式執行結束後,記憶體被釋放,但是,裡面的資料並沒被擦除,就好比,用完了器材,沒有歸位一樣;那你下次使用的時候,就需要給它初始化,相當於手動歸位。

如果你不去初始化,你可能會得到,奇怪的輸出,例如,未初始化的字串,可能是 "燙燙燙" 之類,未初始化的 int 陣列,可能是 "-10562384, 3, 58236582"之類;

而這種輸出,正是C語言的乙個特點,它會讓你,深刻領會計算機的原理,了解計算機的思維。它們是記憶體裡,曾經留下的無效內容,就像那些,被使用過,卻未被歸位的器材。你經歷過一次之後,就加深了一次印象,最後就養成了,初始化的好習慣。

某些程式語言,設計的過於"自動化",其實會降低效率;而且,會讓學習的人,失去"自力更生"的能力,不能真正地去領悟,程式設計的內涵;它們沒有讓你,按照計算機的方式,去思考,而是利用現成的庫函式和庫類,去得到乙個結果;

而C語言,可以讓你享受,和計算機交流的過程,能讓你體驗,"自力更生"的過程,而不是 rely on others to feed you。

3樓:曉瘋

變數對應於記憶體中的乙個儲存單元,變數的本質是記憶體中一段儲存空間。定義變數只是宣告這塊儲存空間。

這塊空間裡原本是存在乙個值的,但一定不是你需要的值。

c語言中,定義兩個結構體,為什麼順序不同,sizeof大小不一樣

已登出 要對齊啊,首先任何型別不做對齊聲明的話,長度為字長的倍數。型別在父型別中的開始位置為自己長度的倍數,在s1中 a開始位置為1的倍數,b開始位置為4的倍數,c開始位置為2的倍數,因此a的偏移為0,b為4 7,c為8 9,整個結構體需要長度為12 宅學部落 王利濤 為了簡化 CPU 和記憶體 R...

如何評價 Teambition 的設計語言 Clarity Design?

不是經驗 不成知識的提問和回答,真希望 知乎上能少點。這種問題除了立場不同而互噴,就是中國式 閱讀題 的答覆 卯足了勁兒揣測作者含義的行為 沒啥意義。 antd算是中度偏重度使用者來說兩句,看到這個cdesign還是挺欣喜的,畢竟有多一分選擇不是壞事,還是挺希望看到ui元件庫興興向榮。螞蟻這套東西,...

老標準的C語言這樣定義函式方法嗎?

這是 ANSI C 出現之前的事了,後來大家發現,這種寫法在宣告函式時無法檢查引數型別,於是就在 ANSI C 中改進了。但是現在好像還有一些 UNIX 的系統原始碼,為了穩定而沒有做改動。在 K R 第二版附錄裡有講。 SuperSodaSea 參考標準 C11 ISO IEC 9899 2011...