结构数组 - sizeof返回意外结果

问题描述 投票:0回答:2

我在我的代码中声明了一系列简单结构。返回的sizeof()响应与数组的大小不匹配。是否还有其他方法可以声明这一点以确保正确的响应大小?

struct control_cmd {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
};

struct control_cmd control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

当我期待sizeof(control_cmds)的值时,16返回值2

这是怎么回事?

c struct sizeof
2个回答
2
投票

sizeof是内存中的大小,而不是元素的数量。在数组(不是指针!)的情况下,您可以通过将数组的大小除以单个元素的大小(即sizeof(control_cmds) / sizeof(*control_cmds))来获得元素的数量。


1
投票

我会键入def control_cmd_t,将control_cmds声明为control_cmd_t数组,并将两者分开。 (非常类似于Arkku的答案)。

#include <stdio.h>

typedef struct control_cmd_t__ {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
} control_cmd_t;

control_cmd_t control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

int main()
{
    printf("sizeof control_cmd_t is: %ld\n", sizeof(control_cmd_t));
    printf("sizeof control_cmds is: %ld\n", sizeof(control_cmds));
    printf("number of elements in control_cmds is: %d", (sizeof(control_cmds)/sizeof(control_cmd_t)));

    return 0;
}

输出:

sizeof control_cmd_t is: 16
sizeof control_cmds is: 32
number of elements in control_cmds is: 2
© www.soinside.com 2019 - 2024. All rights reserved.