我可以用这段代码编写一个可变大小的数组吗?

时间:2014-08-02 18:59:28

标签: c arrays dynamic-arrays

我可以使用以下代码编写可变大小的数组吗?

我在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]);
    }
}

2 个答案:

答案 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;这种用法也是未定义的。如果您尝试执行该程序,最可能的结果是崩溃。

所以回答你的问题,不,这不是创建可变大小数组的有效方法。