Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在C中创建自定义数组大小表?_C_Arrays - Fatal编程技术网

无法在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

您好,我想创建一个数组表,它是2xX,X是一个自定义的数字,比如说20,所以我们将得到一个2x20数组表,所有这些都是c。 我试着这样做

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
不会太大。