繁体   English   中英

如何在C90中分配可变大小的数组?

[英]How to allocate variable size array in C90?

我需要为SYMBOLs分配一个varibale大小,

typedef int SYMBOL

我按照以下方式做了

SYMBOL test[nc] ,这里nc是一个整数。 但这给了我以下警告:

ISO C90 forbids variable-size array

如果没有收到警告我该怎么办?

谢谢,Thetna

alloca库函数用于在引入可变大小的数组之前。

这一切都与递增堆栈指针有关。 对于典型的常量大小数组的声明,堆栈指针使用在编译时已知的常量递增。 声明可变大小的数组时,堆栈指针会增加一个在运行时已知的值。

你必须使用malloc分配它:

SYMBOL* test = malloc(sizeof(SYMBOL) * nc);

// ...

free(test);

C90中不允许使用可变长度数组,我认为它们是在C99中引入的。

使用malloc 在这里,您可以分配一个具有输入大小的数组:

int *p;
int n;
scanf(" %d", &n);
p = malloc( n * sizeof(int) );

此外,您可以使用( p[0]p[1] ,...)表示法访问该数组。

为什么不使用C99? 您可以通过添加-std = c99选项使用gcc执行此操作。 如果编译器足够智能以识别某个功能是C90而不是其他东西,我敢打赌它足够智能来处理C99功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM