Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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
如何创建和访问行为类似于C89中数组的结构?_C - Fatal编程技术网

如何创建和访问行为类似于C89中数组的结构?

如何创建和访问行为类似于C89中数组的结构?,c,C,在C99之前,程序员必须用编译时已知的固定大小定义所有数组。人们是如何创建和访问行为类似于数组但其大小在运行时才知道的结构的?使用和进行动态内存管理。今天还是这样 void f(int n) { int *nInts = malloc(n * sizeof(int)); /* do stuff with 'nInts' */ free(nInts); } 我想你指的是 正如上面所说的,还不能确定它是合法的还是便携的。也就是说,我见过这样的代码,但我自己从来没有写过。他们使用了黑

在C99之前,程序员必须用编译时已知的固定大小定义所有数组。人们是如何创建和访问行为类似于数组但其大小在运行时才知道的结构的?

使用和进行动态内存管理。今天还是这样

void f(int n)
{
  int *nInts = malloc(n * sizeof(int));

  /* do stuff with 'nInts' */

  free(nInts);
}

我想你指的是


正如上面所说的,还不能确定它是合法的还是便携的。也就是说,我见过这样的代码,但我自己从来没有写过。

他们使用了黑魔法^D^D^D^D^D^D^D^D
malloc()
。ANSI C程序员从来没有义务定义编译时已知的具有固定大小的所有数组,除非所说的数组是“堆栈上的数组”在这种情况下,你的问题几乎可以自己回答。难道不是C99允许在堆栈上使用可变长度数组吗?@Haz-Oh,所以记住这一点的不仅仅是我。我也会编辑这个。或者
alloca()
和no
free()
:-这就是变长数组通常在C中的实现方式吗?你能再解释一下吗?:)@templatetypedef是的,它是。或者,从C99开始,您也可以使用可变长度堆栈数组。@杰克:这就是为什么VLA没有您想象的那么有用的原因。