C語言中的單引號和雙引號的區別

原網址:http://www.cnblogs.com/arvintang/p/5115698.html (若侵權請告知,必刪)

首先肯定地說,二者是有區別的,不是說用誰都一樣。

1、實質區別,代表的含義不同

‘A’代表的是一個整數,而且這個整數對應的是編譯器所採用的字符集中的字符序列對應的數值。所以’A’跟ASCII中的65意義是相同的。

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    int str2 = 65;

    cout<<str1<<endl<<(char) str2<<endl;

    return 0;
}

這裏寫圖片描述

2、佔用的內存空間大小不同

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    char str2 = "A";

    cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;

    return 0;
}

大家猜一猜輸出的str1的大小是多少?str2輸出的大小是多少?
????????????????????????????
不用猜了,爲啥,因爲編譯不了啊。怎麼會編譯不了?因爲編譯器報錯了。
這裏寫圖片描述

看出了因爲啥了嗎?我英文差,估計應該是說第9行,定義的一個字節存不下,建議你定義兩個字節,就是char str2[2]來存放”A”。明明”A”應該佔用一個字節啊?爲啥要給他分配兩個字節的空間呢?

因爲這裏系統會在字符串的尾端默認添加一個二進制爲0的字符’\0’,其實它就是一個轉義字符。

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    char str2[2] = "A";

    cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;

    return 0;
}

這裏寫圖片描述

發佈了75 篇原創文章 · 獲贊 28 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章