我有一个像这样的结构什么是sizeof函数的输出.
struct sample
{
int a;
char b;
};
struct sample obj;
struct sample * ptr;
sizeof(*ptr);
Run Code Online (Sandbox Code Playgroud)
我使用gcc编译器在C中尝试了这段代码,这给了我结构本身的大小.但是我怀疑在使用其他C编译器和C++时是否会产生相同的结果.
你能帮帮我吗?
提前致谢.
我使用gcc编译器在C中尝试了这段代码,这给了我结构本身的大小
正如它应该.一元运算sizeof符的参数可以是表达式或带括号的类型名称.C中的所有表达式都有一个类型.这sizeof意味着要查看表达式将要评估的类型,并给出该类型的大小.
由于*ptr是类型的表达式struct sample,结果应该是大小struct sample.值得一提的是,通常甚至不需要评估表达式,可以静态确定大小(除非您正在处理VLA).
您可以依赖该行为,因为这是C标准指定它应该做的事情.它总是给出结构的大小.您不能依赖编译器的大小相同,但您可以确定行为sizeof将具有.
由于您自己的示例使用指针,因此"我可以转换malloc的结果吗?"中描述了这种行为有用的地方.,您将提供malloc取消引用指针的大小,而不是类型:
struct sample * ptr = malloc(sizeof *ptr);
Run Code Online (Sandbox Code Playgroud)
理由是你不需要重复两次类型名称(在C++中需要一次演员的三次),帮助你避免重构时可能出现的细微错误.
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |