C C Primer Plus閱讀筆記

2021-09-06 22:44:23 字數 1330 閱讀 5993

常用頭: stdio.h string.h inttypes.h limits.h float.h

1.列印short、long、long long和unsigned

#include int main(void

)

結論:即使是變數本身是無符號型別, 列印的時候也需要加上u, 否則按有符號型別列印; 如果用短型別去列印長型別, 則會被擷取最後n位

2.八進位制或十六進製制表示乙個字元

char c = '

\0101';

char ch = '

\x41

';

ps:為什麼使用'\0101'而不是0101表示乙個字元, 因為'\0101'更能清晰的表達乙個字元的意圖, 其次'\0101'這樣的轉義序列可以嵌入到c字串中, 如"hello!\0101\n"

3.緩衝區滿、遇到換行符及需要輸入的時候會將緩衝區內容輸出到螢幕

4.浮點型常量預設是double(可以加字尾f為float型儲存), 整型常量預設以int型儲存(可以加字尾l把小整數變為long型儲存), 如果int不能表示則用long, 如果long不能表示則用unsigned long, 如果仍然不夠則使用long long或unsigned long long來表示

5.型別轉換

6.scanf 在讀取字串時遇到空格即停止

7.printf("*%5.3d*", 2); 結果為 *  002*

8.

#include int

main()

輸出0 1074266112 0 1074266112

9.printf 工作原理

如8中的例子

printf("

%ld %ld %ld %ld\n

", n1, n2, n3, n4);

該呼叫告訴計算機把變數n1, n2, n3, n4的值傳遞給計算機, 計算機把他們放置到堆疊的一塊記憶體中, 計算機根據變數的型別而非轉換說明符把這些值放到堆疊中, 所以n1在堆疊中占用8個位元組(float被轉換成double), 同樣, n2占用8個位元組, n3和n4分別占用4個位元組, 然後控制轉移到printf函式, 該函式從堆疊把值讀出來, 但是在讀取時, 它根據轉換說明符去讀取, %ld說明符指出, printf應該讀取4個位元組, 索引printf在堆疊中讀取前4個位元組作為它的第乙個值, 這就是n1的前半部分, 它被解釋成乙個長整數, 下乙個%ld說明符再讀取4個位元組, 這就是n1的後半部分, 它被解釋成第二個長整數, 同樣%ld的第三個和第四個例項使得n2的前半部分和後半部分被讀出, 並被解釋成兩個長整數, 所以雖然n3和n4的說明符都正確, 但是printf仍然讀取了錯誤的位元組

《Elasticsearch 權威指南》閱讀筆記

原文 elasticsearch 權威指南 技術上來說,乙個主分片最大能夠儲存 integer.max value 128 個文件,但是實際最大值還需要參考你的使用場景 包括你使用的硬體,文件的大小和複雜程度,索引和查詢文件的方式以及你期望的響應時長。索引在預設情況下會被分配5個主分片 如果你的資料...

HashSet HashMap 原始碼閱讀筆記

hashcode 與 equals 應一起重寫,在hashmap 會先呼叫hash key.hashcode 找到對應的entry陣列位置 一般初始是16,2 x,rehash後會翻倍 再在這個entry鍊錶上equals判斷是否存在相同元素。所以當重寫equals時沒保證hashcode出的值的一...

librdkafka 配置相關原始碼閱讀筆記

支援配置項介紹 相關api name 配置項的名稱,例如 queue.buffering.max.messages type 配置項的取值型別,例如字串 整型等。這是乙個列舉,其定義如下 define rk field offsetof rd kafka conf t,field define rk...