我写了以下代码(参见问题的代码注释),
#include int main() { int size; scanf("%d",&size); int arr[size]; /*is it a valid statement?*/ for(int i=1;i<=size;i++) { scanf("%d",&arr[i]); printf("%d",arr[i]); } return 0; }
使用非常量数组大小是有效的C99但不是C90。 有一个较旧的gcc扩展允许它。
请注意,利用这一点可以更加难以检查内存分配是否成功。 将它与用户提供的值一起使用可能并不明智。
您不能像这样在C90中分配动态数组。 您必须使用malloc动态分配它,如下所示:
int* array = (int*) malloc(sizeof(int) * size);
您还可以从0开始索引数组而不是1,因此for循环应该像这样开始:
for(int i = 0; i < size; i++)
如果你使用malloc方法,你还需要在完成后释放内存:
free(array);
也,
C
数组索引从0开始,而不是从1开始,并且不包括size
。
int i; for(i=0 ; i < size ; i++) // Notice the < and the 0 { //... }
编译器尝试在编译时计算int arr[size]
。 在这种情况下,arr在堆栈上分配,因此编译器希望提前知道其大小。 相反,您需要使用malloc
在堆上分配arr,就像这样。
#include int main() { int size; scanf("%d",&size); int *arr = malloc(sizeof(int) * size); for(int i=1;i<=size;i++) { scanf("%d",&arr[i]); printf("%d",arr[i]); } free(arr); return 0; }
有关何时使用malloc
更多信息,请参阅此文章
如果大小不变,这将是有效的。 否则,你应该做DShook所说的。 另外,确保你在某个时候释放(数组),否则你的程序会泄漏内存。
以上就是c/c++开发分享关于C中的数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545680.html