创建一个结构数组,创建大型数组,C

时间:2013-09-25 02:24:45

标签: c arrays struct

我正在创建一个结构数组,当我初始化数组时,它从结构中的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;

2 个答案:

答案 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指向的结构的大小,但这是数组的单个元素,而不是整个数组。

没有办法从指向它的数组的指针中获取,只是因为指针指向单个事物而不是数组。通过这个,我的意思是可能指向数组的第一个元素,但这与指向数组不同。区别是微妙但重要的。

如果你想知道数组的大小,你唯一拥有的就是指向它的指针,你必须单独记住它。