tft每日頭條

 > 生活

 > c語言的單引号和雙引号

c語言的單引号和雙引号

生活 更新时间:2024-07-28 06:24:48

今天看了《C陷阱與缺陷》中對 ""'' 的描述,'' 引起的一個字符代表一個整數,整數值對應于該字符在編譯器采用的字符集中的序列值。

"" 引起的字符串代表的是一個指向無名數組起始字符的指針。對這兩個符号産生了興趣,遂打開 VS2010 查看了單引号、雙引号引起的字符在内存中的存儲形式。

實驗方式很簡單,分别查看 "yes"/'yes'/'ye'/'y' 四種字符在内存中的存儲形式,代碼如下:

int _tmain(int argc, _TCHAR* argv[]) { char test1[] = "yes"; int test2 = 'yes'; printf("%x\n", &test2); int test3 = 'ye'; printf("%x\n", &test3); int test4 = 'y'; printf("%x\n", &test4); return 0; }

實驗結果如下:

c語言的單引号和雙引号(語言中單引号與雙引号的區别)1

根據内存中的存儲形式,發現 '' 引起的字符串按照整數的存儲形式,将第一個字符識别為最高位,最後一個字符識别為最低位,按此順序存入 int 變量 4 個字節的存儲空間中;

"" 引起的變量按照第一個字符存儲在起始地址處,最後一個字符存儲在結束地址處。

實驗的結果證實了《C陷阱與缺陷》中的描述,那麼當 '' 引起的字符超過 4 個字節時會出現什麼情況呢?再進行一次實驗,代碼如下:

int _tmain(int argc, _TCHAR* argv[]) { char test1[] = "yes"; int test2 = 'yes'; printf("%x\n", &test2); int test3 = 'ye'; printf("%x\n", &test3); int test4 = 'y'; printf("%x\n", &test4); int test5 = 'yesa'; printf("%x\n", &test5); return 0; }

實驗結果如下:

c語言的單引号和雙引号(語言中單引号與雙引号的區别)2

根據實驗結果可以看到字符超過 4 個字節,超出了 int 型存儲能力,編譯器報錯,提示常量字符太多。這樣可以有效提醒給程序猿同學,有可能存在符号輸入錯誤,但是沒有超過 int 型存儲能力時照單全收,沒有任何提示,存在着符号誤用的隐患,以後程序出現問題調試會相當麻煩。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved