0

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

2 回答 2

1

这里不是给你数组的大小,而是给你指针的大小:

printf("%d size of agentList when initialised\n", sizeof(agentList));

无法从指针确定数组的大小,需要单独存储数组的大小并随身携带。

这就是为什么您会注意到 C 中的许多函数都具有指针和大小参数的原因。

于 2013-09-25T02:26:58.570 回答
1
printf("%d size of agentList when initialised\n", sizeof(agentList));

这将为您提供agentList 指针的大小,在当前系统中很可能是四或八。

同样,sizeof(*agentList)只会为您提供指向的结构的大小,agentList但这是数组的单个元素而不是整个数组。

没有办法从一个指针中得到它所指向的数组的大小,因为指针指向一个单一的东西,而不是一个数组。我的意思是它很可能指向数组的第一个元素,但这与指向数组不同。区别很微妙但很重要。

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

于 2013-09-25T02:27:00.803 回答