我试图制作一个二维数组,给定行和列的数量作为用户输入。
int main(void)
{
int nx, ny;
scanf_s("%d", &nx);
scanf_s("%d", &ny);
int array[nx][ny];
return 0;
}
但VSC告诉我,括号[]中必须有常量。
有什么方法可以将"nx"one_answers"ny"转换为常量吗?
或者有没有其他方法可以在不转换数据类型的情况下声明2-D或N-D数组?
您应该使用malloc或出于教育目的声明MAX大小矩阵,并且只能在nx-ny区域内工作
#define MAX 1000
int main(void)
{
int nx, ny;
int array[MAX][MAX];
scanf_s("%d", &nx);
scanf_s("%d", &ny);
if(nx > MAX || ny > MAX) return 1; // valid range check
// work with array
return 0;
}
这是一种方法:
int main(void)
{
int nx=0, ny=0;#intialize some random values to the variable
scanf_s("%d", &nx);
scanf_s("%d", &ny);
int array[nx][ny];
return 0;
}
C99引入";可变长度阵列";("VLA"(,但我强烈反对使用它们。你最好的选择是使用好的旧malloc((
示例:
https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/
#include <stdio.h> #include <stdlib.h> int main() { int r = 3, c = 4; //Taking number of Rows and Columns int *ptr, count = 0, i; ptr = (int *)malloc((r * c) * sizeof(int)); //Dynamically Allocating Memory for (i = 0; i < r * c; i++) { ptr[i] = i + 1; //Giving value to the pointer and simultaneously printing it. printf("%d ", ptr[i]); if ((i + 1) % c == 0) { printf("n"); } } free(ptr); }
附录:
MSVS可能支持16.8或更高版本中的VLA:https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/