定义一个二维全局数组,其大小必须从文件中扫描

时间:2013-12-27 20:13:59

标签: c data-structures

我想将二维数组定义为全局变量:

 int visited[nbVertices][nbVertices];

但问题是我必须从文件中扫描“nbVertices”。反正有没有解决这个问题?  我认为可以通过使用指针来修复,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

使用malloc。

您的代码可能如下所示:

// somewhere in file, global
int **visited;

// somewhere in your code, when you read nbVertices
visited = malloc(sizeof(int*) * nbVertices);
for(size_t i = 0; i < nbVertices; i++)
    visited[i] = malloc(sizeof(int) * nbVertices);

使用visited

不应有任何重大差异

答案 1 :(得分:1)

所以,虽然我们在这里:你不需要数组是全局的。因此,您可以使用可变长度数组并将数组传递给所有需要它的函数:

void printArray(int n, int k, int arr[n][k])
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            printf("%6d", arr[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    // get user input in the format "n" <space> "k"
    char *end;
    char buf[LINE_MAX];
    if (!fgets(buf, sizeof buf, stdin))
        return -1;

    // create array, fill it with random stuff
    int n = strtol(buf, &end, 10);
    int k = strtol(end, NULL, 10);
    int a[n][k];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            a[i][j] = random();
        }
    }

    // print it
    printArray(n, k, a);

    return 0;
}