sizeof(*struct pointer)是否为您提供了结构的值

Aja*_*jay 0 c c++ sizeof

我有一个像这样的结构什么是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++时是否会产生相同的结果.

你能帮帮我吗?

提前致谢.

Sto*_*ica 8

我使用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++中需要一次演员的三次),帮助你避免重构时可能出现的细微错误.