结构数组 - sizeof 返回意外结果
array of structures - sizeof returning unexpected result
我在代码中声明了一组简单结构。一种
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)
returns 当我期望值 2
.
时值 16
怎么回事?
sizeof
是内存中的大小,不是元素个数。如果是数组(不是指针!),您可以通过将数组的大小除以单个元素的大小来获得元素的数量,即 sizeof(control_cmds) / sizeof(*control_cmds)
.
我会 typedef 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
我在代码中声明了一组简单结构。一种
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)
returns 当我期望值 2
.
16
怎么回事?
sizeof
是内存中的大小,不是元素个数。如果是数组(不是指针!),您可以通过将数组的大小除以单个元素的大小来获得元素的数量,即 sizeof(control_cmds) / sizeof(*control_cmds)
.
我会 typedef 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