第三章貌似沒有作者給出的原始碼。
見demo01.c
即可。包含了後自行檢視即可。也可以直接去檢視
中到底是怎樣定義的。
見中的定義即可。
很實用啊,真正的見名知意。
warning
警告。只要能放下也無所謂。否則,根據各個編譯器自己的規矩來,可能溢位,可能直接丟棄高階位,這些情況都是有可能的。
精度丟失。warning
警告。對於整數,如果能裝得下,那就直接裝就行了。如果裝不下,這就取決編譯器是怎麼實現該情況的了。對於浮點數,需要檢視指數和尾數能否裝得下,否則依舊看編譯器是怎麼處理的。
enum change ;
不確定。列舉型別是拿整形來儲存的,但是這裡是%s
格式化字串列印,則輸出是不確定的。如果是%d
則輸出 32 48。
不允許。vs2019
應該可以看,vscode
還沒摸索這個問題。
適用於字元型別。顯示定義字元變數,保證一致性。
所能表示的數的範圍都是一樣的。只不過區別在於對於一半數是如何解釋的。
float
作為浮點型範圍比int
大。float
長度 32 位,其中 1 位是符號位,8 位是冪,剩下的 23 位是尾數。如果位數相同,那麼它們能表示的不同值的數量應該也是相同的。但是由於浮點數系統中乙個數有多種表示方式。譬如,0 就有很多種表示方式,所以在表示不同值的數量上float
比int
少。
沒啥不同。顯示初始化就是將兩個合到一起罷了,在定義的時候隱式的插入了一條賦值語句而已。
左邊仍舊可以。右邊錯誤,不能該乙個常量賦值。
錯。若巢狀**塊中包含了同名變數,那麼外層同名變數將被隱藏。
錯。**塊中的區域性變數永遠不能從其它**塊中按名稱直接訪問。
錯。static
延長所修飾變數的生命週期,更改其儲存類,但並不會更改其作用域。答案仍舊錯誤。
這就是全域性變數。不需要做任何操作。
extern int x;
見demo14.c、demo15.c
。
會。static
和extern
兩者就是矛盾的。static
修飾本檔案內的變數,在函式中的是靜態變數。而extern
表示的是其他檔案定義的變數,顯然兩者是矛盾的。且單單用static
來宣告,卻想獲取其他檔案的全域性變數是不可能的。
可能相同。函式內自動變數在堆疊中用完即銷毀。第二次呼叫可能仍分配同樣位址造成結果相同。但是堆疊資訊被破壞時,這些變數的資訊也將被破壞。只是巧合而已。
見demo20.c
。個人覺得,static char b = 2;
其鏈結屬性應該是internal
。而不應該是none
,畢竟要求x
和y
都要能訪問到。
有乙個錯誤:第 6 行中c
的宣告與函式引數c
衝突編譯器將第 24 行標記為錯誤,稱其與中的宣告衝突第 20 行。這不應該是乙個錯誤,因為第 20 行中y
的範圍在第 22 行用完了,因此不是衝突。
整形基本的資料型別僅有 4 種:整形、浮點型、指標和聚合型別(陣列、結構體等)。
字面值
列舉型別 指標
字串宣告及初始化
typedef
的使用 常量
作用域
鏈結屬性
這個概念大多涉及多檔案編譯啥的。目前還是用的很少很少。
儲存型別
初始化
static
關鍵字
作用域、儲存型別示例
鏈結屬性問題。三大鏈結屬性的應用。
一大堆的概念…鏈結屬性那塊,以前的知識盲區。
static
和extern
關鍵字的作用和用途。面試中瘋狂考。只不過,extern
通常去考extern c
去了。像多程式編譯,全域性變數宣告即鏈結屬性哪塊很少被問到。
C和指標 ch14 預處理器
c語言巨集用的很多很多,看看stdio.h等各種標頭檔案或者開源專案中的應用就懂了,各種巨集定義,坑點也是蠻多的,需要學習並注意。見名知意。方便修改 維護。考查 file 巨集及 line 的使用,以及引數轉字串的方法,引數前加 即可。見demo02.c。a.3 2 3 b.5 3 5 c.2 4 ...
C計畫 03 陣列指標 與 指標陣列
指標陣列 char p 2 for int i 0 i 2 i 根據c語言運算優先等級表,指標也是乙個變數,這裡的 char p 2 指的是定義了乙個一維陣列,陣列裡存放的是指標變數,而指標指向的則是後面字串的首個字元的位址。後面printf 中,列印字串只需要給出首個字元地位址即可。int tem...
c與指標 讀書筆記 03
邊界對齊 boundary alignment 在要求邊界對齊的機器上,整形值儲存的起始位置只能是某些特定的位元組,通常是2與4的倍數.硬體通過位址訪問記憶體位置 不能簡單的通過檢查乙個值的位來判斷它的型別 當兩個指標都指向同乙個陣列裡的元素時,才允許乙個指標減去另乙個指標,結果為兩個指標在記憶體中...