1樓:愚禮進君
c的區域性變數一般是在棧上進行分配的。
棧使用的是ram,掉電內容丟失,上電內容隨機。
這裡的隨機,一般指其不能確定其內容一定是什麼,而不是說其內容完全沒有規律,與數學上的隨機數沒有什麼關係。
舉個例子,乙個位元組的ram,8位有256種可能。數學上講隨機數,那麼這個位元組上電後應該是256種可能性中某乙個。但計算機上不是這樣,其上電後的內容一般來說就是0,但你不能保證它一定就是零,有很小的可能它的內容不是0,那麼是多少呢?
不知道!在程式處理上,你就要認為它的內容是隨機的。
回到你的問題,你沒有初始化,得到了乙個確定的執行結果,為什麼?兩個可能,這個結果內容就是隨機的,只不過結果恰好是這個值而已,但你不能保證下次執行結果,那麼你就需要把它當隨機值對待。另乙個可能,你在不經意間執行了初始化,因為c編譯器本身會鏈結一些初始化程式,這個牽涉到另乙個話題,系統是怎麼樣進行初始化的。
結論,變數應該明確的進行初始化。如果系統不能確定你的變數初值是乙個確定的值,那麼就需要你自己來做初始化。
2樓:匿名使用者
第二個問題:為什麼要初始化?
這個是因為不初始化這個變數,這個變數的初值是記憶體的當前狀態,也就是個隨機數。而且if並不賦值。if只比較
第乙個問題:
puts()以乙個指向字串的指標做為引數,如:
char str="hello,world!";
puts(str);
printf()的用法就太靈活了吧,可以進行格式化輸出。等等
3樓:蠻蠻工作室
==不同於=
推薦每次使用變數之前都初始化。
c語言中初始化賦值和用define命令對字元賦值有什麼異同
回憶在上輩子 一個是賦值一個是巨集替換 int r這個r是個變數,其值可變 而 define r這個r是個巨集,在函式中有用到時會用後面的數值進行替換,不能夠改變其值 前者存在變數r,後者不是變數,編譯前就被替換成數12了 前者是變數賦值,變數r佔記憶體,後者是巨集定義,r不佔記憶體,是預編譯的,只...
c語言初始化陣列時一定要使用靜態儲存嗎
ansi iso c之前,對陣列的一次性初始化必須要求陣列被宣告為靜態的,樓上說static和extern與變數的使用範圍有關,沒錯,但不是這裡要使用的含義,這裡靜態 全域性變數預設為靜態的 指的是該變數只初始化一次。全域性變數肯定是只初始化一次的,所以這主要是針對函式塊裡面宣告的變數來說的,就是說...
C語言為什麼輸出的是7 0啊,C語言 7 0,為什麼
字元 hex dec 0 0x00 0 從數值上說上面三個是相等的 0 0x30 48 請lz注意他們的區別 你可以這樣理解strlen 函式的實現 int strlen char str 定義的x是字元型陣列名,但在c語言中字元型變數可以被賦予整形資料,字串裡遇到結束符0 0 就會結束,不管後面是...