簡體   English   中英

創建一個結構數組,創建大型數組,C

[英]Creating an array of structs, creating to large of an array, C

我正在創建一個結構數組,當我初始化數組時,它從結構中的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;

這里沒有給你數組的大小,但給你指針的大小:

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

無法從指針確定數組的大小,您需要單獨存儲數組的大小並隨陣列一起攜帶。

這就是為什么你會注意到C中的許多函數都有指針和大小參數。

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

這將為您提供agentList 指針的大小,該指針很可能在當前系統中為4或8。

類似地, sizeof(*agentList)將簡單地給出agentList指向的結構的大小,但這是數組的單個元素而不是整個數組。

沒有辦法從指針指向它所指向的數組的大小,只是因為指針指向一個單獨的東西,而不是一個數組。 通過這個,我的意思是它可能指向數組的第一個元素,但這與指向數組不同。 區別是微妙但重要的。

如果你想知道一個數組的大小,你唯一擁有的就是指向它的指針,你必須單獨記住它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM