C語言中的單引號和雙引號的區別
阿新 • • 發佈:2018-12-14
首先肯定地說,二者是有區別的,不是說用誰都一樣。
1、實質區別,代表的含義不同
'A'代表的是一個整數,而且這個整數對應的是編譯器所採用的字符集中的字元序列對應的數值。所以'A'跟ASCII中的65意義是相同的。
1 # include <iostream> 2 3 using namespace std; 4 5 int main(int argc, char const *argv[]) 6 { 7 char str1 = 'A'; 8 9 int str2 = 65; 10 11 cout<<str1<<endl<<(char) str2<<endl; 12 13 return 0; 14 }
2、佔用的記憶體空間大小不同
1 # include <iostream> 2 3 using namespace std; 4 5 int main(int argc, char const *argv[]) 6 { 7 char str1 = 'A'; 8 9 char str2 = "A"; 10 11 cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl; 12 13 return 0; 14 }
大家猜一猜輸出的str1的大小是多少?str2輸出的大小是多少?
????????????????????????????
不用猜了,為啥,因為編譯不了啊。怎麼會編譯不了?因為編譯器報錯了。
看出了因為啥了嗎?我英文差,估計應該是說第9行,定義的一個位元組存不下,建議你定義兩個位元組,就是char str2[2]來存放"A"。明明"A"應該佔用一個位元組啊?為啥要給他分配兩個位元組的空間呢?
因為這裡系統會在字串的尾端預設新增一個二進位制為0的字元'\0',其實它就是一個轉義字元。
1 # include <iostream> 2 3 using namespace std; 4 5 int main(int argc, char const *argv[]) 6 { 7 char str1 = 'A'; 8 9 char str2[2] = "A"; 10 11 cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl; 12 13 return 0; 14 }
轉自 https://www.cnblogs.com/arvintang/p/5115698.html