首先肯定地說,二者是有區別的,不是說用誰都一樣。
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 }