我正在创建一个结构数组,当我初始化数组时,它从结构中的8个元素开始,而不是1.它为什么这样做?如果需要更多的代码(但我怀疑它,因为它们都是单独的功能,如果被问到我可以发布它) 这是相关的代码:
typedef struct {
int valid;
int row, col;
} Point;
typedef struct {
Point point;
int number;
char name;
char param[20];
char type[20];
} Agent;
int main(int argc, char **argv)
{
int steps;
int listSize = 0;
Agent *agentList = (Agent *) calloc(1, sizeof(Agent));
printf("%d size of agentList when initialised\n", sizeof(agentList));
if (argc != 4) {
error(SHOW_USAGE);
}
sscanf(argv[2], "%d", &steps);
if ((steps < 1)) {
error(BAD_STEPS);
}
readMap(argv[1]);
agentList = readAgentFile(argv[3], agentList);
print_agents(agentList);
return 0;
答案 0 :(得分:1)
这里没有给出数组的大小,但给出了指针的大小:
printf("%d size of agentList when initialised\n", sizeof(agentList));
无法从指针确定数组的大小,您需要单独存储数组的大小并随阵列一起携带。
这就是为什么你会注意到C中的许多函数都有指针和大小参数。
答案 1 :(得分:1)
printf("%d size of agentList when initialised\n", sizeof(agentList));
这将为您提供agentList
指针的大小,在当前系统中很可能是4个或8个。
同样,sizeof(*agentList)
只会给你agentList
指向的结构的大小,但这是数组的单个元素,而不是整个数组。
没有办法从指向它的数组的指针中获取,只是因为指针指向单个事物而不是数组。通过这个,我的意思是可能指向数组的第一个元素,但这与指向数组不同。区别是微妙但重要的。
如果你想知道数组的大小,你唯一拥有的就是指向它的指针,你必须单独记住它。