C/C++冷门知识点你知道多少呢?
在學習C語言的過程中,我們都自己總結了一些重要的知識點,但是有些不常用的冷門知識點可能就被我們選擇性忘記了,你要不要來回一下呢?
1:int跟signed int是一回事,short、long亦然,但char不是。
char、signed char、unsigned char在邏輯上是三種類型,比較直觀的體現就是在C++的重載中,你可以定義參數類型分別為它們的三個同名函數。但實現上的類型只有兩種,char可能是signed也可能是unsigned的,看編譯器實現,現在很多編譯器默認是signed,但可以通過選項配置或參數指定為unsigned。
2:你是否已經習慣了“\xHH”這種兩個H的寫法的16進制換碼序列?
但實際上C規定H可以任意多的。
例如:
cout << strlen("\x0012") << endl;不過如果后面數字太大,是有可能出現溢出的情況,不同編譯器處理方式不同,gcc會報錯,vc是截取末尾4字節。
可以試試:
cout << "\x1234567890000000000000000000041" << endl;那如果我想要\x00、1、2這仨字符組成的字符串字面量呢?可以這樣寫:"\x00""12",多個字面量連著寫,會幫你連起來。
3:字符串!!!
很多語言都支持用反斜杠放在行尾來折行,C++也可以,不過這種代碼:
cout << "hello \\ tony" << endl;有人可能會認為編譯失敗,因為行尾的反斜杠被前面一個轉義了,但實際上一些編譯器(比如gcc)并不會到詞法分析階段來搞這個事情,采用了非常粗暴的方式:直接讀入源文件然后將里面的"\\\n"替換為空串,然后再開始編譯,所以上面的代碼其實等于:
cout << "hello \tony" << endl;第一個反斜杠跟第二行的t連起來,就是tab符了。
4:還是字符串!!!
C語言以前有三字符換碼序列,比如??=表示#等,不過現在很多編譯器已經不想支持這種東東了,比如新的gcc會給出個warning,新標準好像也不打算支持了,據說是因為IBM的字符集和老的一些鍵盤沒有#之類的字符,很多老代碼是這種形式寫的,這個特性的去留問題后面還引起爭論,有大佬直接說你們換個新鍵盤就好啦。
5:C語言的sizeof是一個關鍵字!!!
sizeof是前綴單目運算符,而不是函數。
這意味著你可以直接寫:
cout << sizeof 1 << endl;然后,強制類型轉換運算、指針解引用運算也是前綴單目運算符,而我們知道前綴單目運算符是右結合的,那么這個式子:
sizeof(int)*p 應該解釋為:對指針p解引用,然后強制轉換為int類型,然后取sizeof咯?哈哈哈雖然邏輯嚴謹,但其實不是的,因為還有特殊規定:sizeof后面如果是一個強制類型轉換的表達式,則必須加括號,所以不用擔心,上面的代碼是int的大小乘以p
最好還是給所有sizeof加上括號吧。。。
6:大家是不是都習慣用stdint.h中的int32_t這些類型了,很多資料也推薦用,但這些類型其實是optional的,就是說可能是不提供或缺失,例如ILP64模型下,就沒有32位的整型,不過大部分平臺還是有的!!!
完
關注它,
你就可以得到
很多你想要的C/C++
開發工具及學習視頻資料
總結
以上是生活随笔為你收集整理的C/C++冷门知识点你知道多少呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中学生优秀电脑绘画作品(全国中学生电脑绘
- 下一篇: 苹果关机了闹钟还会响吗