我在代码中声明了一组简单的结构。一种
返回的sizeof()
响应与数组大小不匹配。还有其他方法可以声明这种方式以确保正确的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
。
这是怎么回事?
答案 0 :(得分:2)
sizeof
是内存中的大小,而不是元素数。如果是数组(不是指针!),则可以通过将数组的大小除以单个元素的大小(即sizeof(control_cmds) / sizeof(*control_cmds)
)来获得元素数。
答案 1 :(得分: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