我在做第一学期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