以下代码
#include <iostream>
using namespace std;
int main()
{
const char* const foo = "f";
const char bar[] = "b";
cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}
输出
sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
在32位操作系统上,使用GCC编译。
sizeof
计算字符串文字的长度(所需空间)?sizeof
时是否具有不同的类型(来自char *或char [])?答案 0 :(得分:103)
sizeof("f")
必须返回2,一个用于'f',另一个用于终止'\ 0'。sizeof(foo)
在32位计算机上返回4,在64位计算机上返回8,因为foo是指针sizeof(bar)
返回2,因为bar是两个字符的数组,'b'和终止'\ 0'。字符串文字的类型为'char的大小为N的数组',其中N包含终端null。
请记住,传递给sizeof
时,数组不会衰减为指针。
答案 1 :(得分:13)
sizeof
返回其操作数的字节大小。这应该回答问题1;;)此外,当传递给sizeof
时,字符串文字的类型为“array to n const char”。
您的测试用例,一个接一个:
"f"
是由。组成的字符串文字
两个字符,字符f
和终止
NUL。foo
是一个指针(编辑:无论限定符如何),并且系统上的指针似乎长达4个字节.. bar
,案例与"f"
相同。希望有所帮助。