我有一个关于编译器如何存储 C 字符串的问题?这里有一些代码:
#define STRING_MACRO "macro"
const char * string_const = "w";
int main(void){
printf("%u\n", sizeof(STRING_MACRO));
printf("%u\n", sizeof(string_const));
return 0;
}
输出:
6
4 -- 我的系统是x86,所以是4
所以我对编译器如何存储c字符串感到困惑?宏样式和值样式之间是否相同?
我认为大多数人误解了我的问题。所以我自己尝试了另一个代码。
#define TEST "a"
int main(void)
{
char hello[] = "aa";
char (*a)[10] = &hello;
printf("%u\n", sizeof(TEST));
printf("%u\n", sizeof(hello));
printf("%u\n", sizeof(*a));
return 0;
}
输出:
2
3
10
所以我得出一个结论,编译器将宏样式的 c 字符串存储在 char[] 类型中,而不是 char * 类型中。