我在做第一學期C++課程的回顧,我想我錯過了一些東西。字符串佔用了多少字節?字符?一個字符串需要多少個字節?字符?
我們給出的例子是,有些是字符文字和有些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我尤其換行符在那裏的使用混淆。
我在做第一學期C++課程的回顧,我想我錯過了一些東西。字符串佔用了多少字節?字符?一個字符串需要多少個字節?字符?
我們給出的例子是,有些是字符文字和有些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我尤其換行符在那裏的使用混淆。
#include <iostream>
int main()
{
std::cout << sizeof 'n' << std::endl; // 1
std::cout << sizeof "n" << std::endl; // 2
std::cout << sizeof '\n' << std::endl; // 1
std::cout << sizeof 'n' << std::endl; // 1
std::cout << sizeof "\n" << std::endl; // 2
std::cout << sizeof "\\n" << std::endl; // 3
std::cout << sizeof "n" << std::endl; // 2
}
單引號表示字符,雙引號表示有一種無形的NUL終止C風格的字符串。
\n
(換行符)只是一個字符,所以是\\
(反斜槓)。 \\n
只是後面跟n的反斜槓。
如果你解釋這是家庭作業,我會+1。 – Pubby 2012-02-21 20:15:09
如果您將'std :: endl'更改爲''\ n'',我會爲您+1。 – 2012-02-21 20:16:11
@Rob:由於''\ n''已經是作業的一部分,我不想不必要地混淆Moshe。 – fredoverflow 2012-02-21 20:18:15
字符串佔用的字節數等於字符串中的字符數加1(終止符),乘以每個字符的字節數。每個字符的字節數可能會有所不同。對於常規的char
類型,它是1個字節。
除了倒數第二個,這是兩個,最後一個是零,所有的例子都是一個字符。 (有些是char
類型的,並且僅限定一個單一的字符。)
char
,根據定義,佔用一個字節。'
的文字是char文字;使用"
的文字是字符串文字。\
是轉義字符,而\n
是換行符。把這些放在一起,你應該能夠弄明白。
'n' - 0x6e
"n" - 0x6e00
'\n' - 0x0a
"\n" - 0x0a00
"\\n" - 0x5c6e00
"" - 0x00
下面就帶X的連續字符內存:
'n' - 1 char (type char)
"n" - 2 chars (above plus zero character) (type const char[2])
'\n' - 1 char
"\n" - 2 chars
"\\n" - 3 chars ('\', 'n', and zero)
"" - 1 char
編輯:格式化固定
EDIT2:我已經寫了一些非常愚蠢的,感謝鳴叫鴨指出了這一點。
實際上,sizeof(「n」)應該等於2.類型「 n「不是'const char *',而是'const char [2]',它是兩個字節。 – 2012-02-21 20:20:57
Mooing Duck - true,my bad – 2012-02-21 20:21:35
您似乎指的是字符串常量。並將它們與字符常量區分開來。
A char
是所有架構上的一個字節。字符常量使用單引號分隔符'
。
字符串是一個連續的字符序列,帶有尾隨的NUL字符以標識字符串的結尾。一個字符串使用雙引號字符'''。
此外,您還介紹了C字符串常量表達式語法,它使用黑色斜線來指示特殊字符。\n
是一個字符串常量中的一個字符。
所以對於例子'n', "n", '\n', "\n"
:
'n'
是一個字符
"n"
是一個字符的字符串,但它需要的存儲(一個兩個字符爲字母n
,一個用於NUL
'\n'
是一個字符,換行(按Ctrl-J基於ASCII系統)
"\n"
是一個字符加上一個NUL。
我離開的人基於這些解出。
's/constants/literals /' – 2012-02-21 20:28:57
'n'
- >一個char
。 A char
總是1個字節。這不是一個字符串。
"n"
- >一個字符串文字,包含一個n
和一個終止NULL char
。所以2個字節。
'\n'
→One char
,A char
總是1個字節。這不是一個字符串。
"\n"
- >一個字符串文字,包含一個\n
和一個終止NULL char
。所以2個字節。
"\\n"
- >一個字符串文字,包含一個\
,一個'\ n'和一個終止NULL char
。所以3個字節。
""
- >一個字符串文字,包含一個終止NULL char
。所以1個字節。
'n'
:不是字符串,是文字字符,一個字節,字符n的ascii碼。"n"
:字符串,兩個字節,一個用於n,一個用於空字符,每個字符串都在末尾。"\n"
:兩個字節爲\ n代表需要一個字節的「新行」,加上空字符的一個字節。'\n'
:與第一個相同,文字字符,不是字符串,一個字節。"\\n"
:三個字節..一個用於\,一個用於換行符和空字符""
:一個字節,只是空字符。詳細說明「string」(C string?'std :: string'?字符串文字?)爲了清晰度勝利。 – 2012-02-21 20:28:19
對不起,我的意思是C字符串。 – gztomas 2012-02-21 21:29:40
「string」,你的意思是'std :: string'還是一個null結尾的char *'? – 2012-02-21 20:13:02