コンパイラが 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[] 型に格納するという結論を得ました。