C-C Primer Plus阅读笔记
常用頭: stdio.h string.h inttypes.h limits.h float.h
1.打印short、long、long long和unsigned
#include <stdio.h>int main(void) {unsigned int un = 3000000000;short end = 200;long big = 65537;long long verybig = 12345678908642;printf("un = %u and not %d\n", un, un); //u=udprintf("end = %hd and %d\n", end, end);printf("big = %ld and not %hd\n", big, big);printf("verybig=%lld and not %ld\n", verybig, verybig);return 0; }結論:即使是變量本身是無符號類型, 打印的時候也需要加上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.類型轉換http://www.cnblogs.com/JohnABC/p/4466113.html
6.scanf 在讀取字符串時遇到空格即停止
7.printf("*%5.3d*", 2); 結果為 *? 002*
8.
#include <stdio.h>int main() {float n1 = 3.0;float n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);return 0; }輸出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仍然讀取了錯誤的字節
?
轉載于:https://www.cnblogs.com/JohnABC/p/4462157.html
總結
以上是生活随笔為你收集整理的C-C Primer Plus阅读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新公司编码规范
- 下一篇: [BZOJ2502]清理雪道解题报告|带