什么是最合适的结构大小的方法

Ark*_*har 1 c struct sizeof

我在C中看到了3种不同的结构尺寸方法.

typedef struct A {
    int a, b;
} A;


sizeof(A); // method 1

sizeof(struct A); // method 2

A *p; 
sizeof(*p); // method 3
Run Code Online (Sandbox Code Playgroud)

哪一个是最合适的方法呢?考虑效率和可读性.

unw*_*ind 8

除了使用可变长度数组外,它sizeof是100%编译时.因此除了可读性,可理解性,安全性等间接外,没有"效率".

我赞成重复次数最少的版本,并且打字最少.因此,如果指针可用,我总是使用第三种形式,但没有括号因为它们不需要.

例如:

float *a = malloc(1000 * sizeof *a);
Run Code Online (Sandbox Code Playgroud)

请注意,像这样的代码"锁定" sizeof到正在使用的指针,这至少要好得多(我认为它好多了,因为典型的函数在范围上的指针少于它们的类型名称)比重复类型更好错配的风险相应减少.

只有当参数是类型名称时才需要代码中的括号sizeof(float)或者您的代码sizeof(A).因为它使它看起来像一个函数调用,它不是,当我必须使用该表单时,我总是用空格格式化它:

void *p = malloc(1000 * sizeof (float));
Run Code Online (Sandbox Code Playgroud)

请记住,这sizeof不是一个功能.