今天看了《C陷阱與缺陷》中對 \”\” 與 \’\’ 的描述,\’\’ 引起的一個字符代表一個整數(shù),整數(shù)值對應于該字符在編譯器采用的字符集中的序列值 。
\”\” 引起的字符串代表的是一個指向無名數(shù)組起始字符的指針 。對這兩個符號產(chǎn)生了興趣,遂打開 VS2010 查看了單引號、雙引號引起的字符在內(nèi)存中的存儲形式 。
實驗方式很簡單,分別查看 \”yes\”/\’yes\’/\’ye\’/\’y\’ 四種字符在內(nèi)存中的存儲形式,代碼如下:
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;
}
實驗結(jié)果如下:

根據(jù)內(nèi)存中的存儲形式,發(fā)現(xiàn) \’\’ 引起的字符串按照整數(shù)的存儲形式,將第一個字符識別為最高位,最后一個字符識別為最低位,按此順序存入 int 變量 4 個字節(jié)的存儲空間中;
\”\” 引起的變量按照第一個字符存儲在起始地址處,最后一個字符存儲在結(jié)束地址處 。
【單引號復制 單引號】實驗的結(jié)果證實了《C陷阱與缺陷》中的描述,那么當 \’\’ 引起的字符超過 4 個字節(jié)時會出現(xiàn)什么情況呢?再進行一次實驗,代碼如下:
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;
}
實驗結(jié)果如下:

根據(jù)實驗結(jié)果可以看到字符超過 4 個字節(jié),超出了 int 型存儲能力,編譯器報錯,提示常量字符太多 。這樣可以有效提醒給程序猿同學,有可能存在符號輸入錯誤,但是沒有超過 int 型存儲能力時照單全收,沒有任何提示,存在著符號誤用的隱患,以后程序出現(xiàn)問題調(diào)試會相當麻煩 。
推薦閱讀
- 紫薯泥的簡單做法
- 72種可養(yǎng)殖野生動物名單 72種可養(yǎng)殖野生動物
- 自制餅干的簡單做法
- 怎么把單元格拆分成兩個
- 香港女歌手名單 香港歌手女歌手名單
- 白色床單的正確清洗方法 白色床單如何清洗
- 森工是什么單位
- 70㎡簡約小公寓,簡單鮮艷的空間,滿屋清新文藝氣息感
- 華為怎么設置下拉菜單 設置下拉菜單
- 最簡單的瘦肉湯做法
