在C++中sizeof('a') == sizeof(char) == 1.这具有直观意义,因为它'a'是一个字符文字,并且sizeof(char) == 1由标准定义.
然而,在C中sizeof('a') == sizeof(int).也就是说,看起来C字符文字实际上是整数.有谁知道为什么?我可以找到很多关于这个C怪癖的提及,但没有解释为什么它存在.
为什么不n等于8以下功能?
void foo(char cvalue[8])
{
int n = sizeof (cvalue);
}
Run Code Online (Sandbox Code Playgroud)
但n 确实等于8这个版本的功能:
void bar()
{
char cvalue[8];
int n = sizeof (cvalue);
}
Run Code Online (Sandbox Code Playgroud) (sizeof)char总是在32位GCC编译器中返回1.
但由于32位编译器的基本块大小为4,当基本大小为4字节时,char如何占用单个字节?
考虑以下因素:
struct st
{
int a;
char c;
};
Run Code Online (Sandbox Code Playgroud)
sizeof(st)返回为8,默认块大小为4字节(因为分配了2个块)
我永远无法理解为什么sizeof(char)在分配大小为4的块时返回为1.
有人可以解释一下吗???
我会非常感谢任何回复解释它!
编辑:'bits'的拼写错误已更改为'bytes'.我对第一次编辑的人抱歉.我回滚了编辑,因为我没有注意到你做的改变.感谢所有那些指出必须改变的人,尤其是@Mike Burton,因为他们对这个问题进行了抨击,并且@jalf似乎对我对概念的理解得出了结论!