无法在C中创建自定义数组大小表?
您好,我想创建一个数组表,它是2xX,X是一个自定义的数字,比如说20,所以我们将得到一个2x20数组表,所有这些都是c。 我试着这样做无法在C中创建自定义数组大小表?,c,arrays,C,Arrays,您好,我想创建一个数组表,它是2xX,X是一个自定义的数字,比如说20,所以我们将得到一个2x20数组表,所有这些都是c。 我试着这样做 int j=20; int table[2][j]; 但是看起来我不能让它工作 在C99+中,您拥有。但是,看起来您没有使用C99+编译器(Visual Studio?),这可能是个坏主意,因为X的大值可能会破坏堆栈。如果您可以保证合理的大小,并且可以使用不同的编译器,那么这是一个不错的选择 但是,如果不能使用VLA,则需要使用动态分配: int *tab
int j=20;
int table[2][j];
但是看起来我不能让它工作 在C99+中,您拥有。但是,看起来您没有使用C99+编译器(Visual Studio?),这可能是个坏主意,因为X
的大值可能会破坏堆栈。如果您可以保证合理的大小,并且可以使用不同的编译器,那么这是一个不错的选择
但是,如果不能使用VLA,则需要使用动态分配:
int *table = malloc(rows * columns * sizeof *table);
这只分配了一大块内存,足够容纳整个表。要获取特定元素,请使用
int item = table[y * columns + x];
如果要使用表[x][y]
语法,则需要以不同的方式分配它
int (*table)[columns] = malloc(rows * sizeof *table);
/* ... */
table[i][j] = value;
/* ... */
int item = table[i][j];
这里,表
是指向C99+中列的数组的指针。但是,看起来您没有使用C99+编译器(Visual Studio?),这可能是个坏主意,因为X
的大值可能会破坏堆栈。如果您可以保证合理的大小,并且可以使用不同的编译器,那么这是一个不错的选择
但是,如果不能使用VLA,则需要使用动态分配:
int *table = malloc(rows * columns * sizeof *table);
这只分配了一大块内存,足够容纳整个表。要获取特定元素,请使用
int item = table[y * columns + x];
如果要使用表[x][y]
语法,则需要以不同的方式分配它
int (*table)[columns] = malloc(rows * sizeof *table);
/* ... */
table[i][j] = value;
/* ... */
int item = table[i][j];
这里,表
是指向列数组的指针
int
s.在C99中是可能的。否则使用malloc/callocYup,只需使用C99编译器(即不是MSVC或Turbo C的编译器)编译即可。C99具有可变长度数组,但您可能不想使用它们(这取决于X
的上限)。您将希望使用dynamicallocation@EdS.有时VLA比动态分配优越得多。在我目前正在使用的编程语言解释器中,通过使用自动数组而不是malloc()
,我可以将函数调用速度提高50%。(太糟糕了,我是用C89写的,所以我没有VLA,但如果有VLA,我会用的。)@H2CO3:当然,这取决于你能否保证X
不会太大。在C99中这是可能的。否则使用malloc/callocYup,只需使用C99编译器(即不是MSVC或Turbo C的编译器)编译即可。C99具有可变长度数组,但您可能不想使用它们(这取决于X
的上限)。您将希望使用dynamicallocation@EdS.有时VLA比动态分配优越得多。在我目前正在使用的编程语言解释器中,通过使用自动数组而不是malloc()
,我可以将函数调用速度提高50%。(太糟糕了,我是用C89写的,所以我没有VLA,但如果有VLA,我会用它。)@H2CO3:当然,这取决于你能否保证X
不会太大。