我想将二维数组定义为全局变量:
int visited[nbVertices][nbVertices];
但问题是我必须从文件中扫描“nbVertices”。反正有没有解决这个问题? 我认为可以通过使用指针来修复,但我不知道该怎么做。
答案 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;
}