我可以使用以下代码编写可变大小的数组吗?
我在Fedora上执行过它。我使用指针a
和整数b
来创建数组,
那么我可以说这个数组是一个动态数组吗?
main()
{
int * const a;
int b;
a[b];
b=5;
int i;
for(i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
}
答案 0 :(得分:2)
不,您无法使用此代码创建可变长度数组。当你使用
int b;
b
可以有任何价值。它可以是0,4294967295或任何其他数字。然后,当你使用
a[b];
a
每次使用执行程序时都可以有任意长度。
接下来的事情:
更改a
值时,b
不会更改其大小:
int b = 5;
int a[b];
b = 6;
// Length of `a` is still 5.
如果要在创建数组后更改数组的大小,您应该阅读malloc()
和realloc()
函数并使用它们。
答案 1 :(得分:1)
该程序的行为未定义。
你永远不会真正分配数组; a
只是一个悬空指针,可能指向或不指向有效的内存地址。在初始化该指针之前,任何取消引用它的尝试都是未定义的。在初始化之前,您还可以使用b
;这种用法也是未定义的。如果您尝试执行该程序,最可能的结果是崩溃。
所以回答你的问题,不,这不是创建可变大小数组的有效方法。