簡體   English   中英

聲明后初始化數組

[英]Initializing an array after declaration

gcc 4.4.3 c89

我有以下代碼作為我要嘗試做的示例。 在輸入函數之前,我不知道數組的實際大小。 但是,我認為聲明后無法設置數組大小。 我需要全局它,因為其他一些功能將需要訪問設備名稱。

非常感謝您的任何建議,

/* global */
char *devices_names[];

void fill_devices(size_t num_devices)
{
    devices_names[num_devices];

    /* start filling */
}

使其動態:

char **g_device_names;
int g_num_devices;

void fill_devices(size_t num_devices) {
    g_device_names = malloc(sizeof(char*) * num_devices);
    g_num_devices = num_devices;
    ...
}

如果使用的是全局數組,則在聲明它時需要知道它的大小(或它的最大大小)。 例如

char *devices_names[MAX_DEVICES];

如果無法執行此操作,則別無選擇,只能使用指針和動態分配的內存。

例如

char **devices_names = 0;

void fill_devices(size_t num_devices)
{
    devices_names = malloc( num_devices * sizeof *devices_names );

    /* ... */
}

當然,這會產生一些影響,例如,如何阻止人們在分配數組之前訪問數組,以及何時釋放它?

您需要使用malloc動態分配內存:

char **device_names;

void fill_devices(size_t num_devices)
{
    device_names = malloc(num_devices * sizeof(char*));
}

然后使用free(device_names); 在不再需要時釋放內存。

您應該使用一個指針,因此當您輸入該方法時,仍未聲明該數組。 您可以使用malloc設置正確的大小。 看這篇文章: 數組和malloc

暫無
暫無

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

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