这个数组是静态的还是动态的?

时间:2012-09-06 15:57:40

标签: c arrays dynamic static malloc

所以我正在研究内存分配,它说你只能使用malloc()动态分配内存;但这不是动态内存分配吗?它工作顺便。所以我有点困惑。

#include<stdio.h>
#include<conio.h>
int main()
{
    int integer,cntr;
    scanf("%d",&integer);
    char words[integer];
    for(cntr = 0;cntr < integer - 1;cntr++)
        words[cntr] = 'k';
    words[cntr] = '\0';
    printf("%s",words);
    getch();
    return(0);
}

3 个答案:

答案 0 :(得分:4)

那是variable-length array。大小确实是动态的,但实际上它通常被分配在堆栈而不是堆上(因此不要将它用于任何太大的东西)。

根据您的编译器等,这可能最终比分配堆内存快得多,只不过是对堆栈指针的调整。

可变长度数组是在C99标准中引入的,因此请记住,您无法在非常旧的C编译器(例如MSVC)中使用它们。

答案 1 :(得分:1)

数组是 本地数组 ,一旦范围(<{1)将 自动 解除分配定义它的结尾。},{) 从技术上讲,标准没有定义应该分配的位置,而只定义了阵列必须提供的特性。该标准甚至没有提到堆栈或堆:

答案 2 :(得分:0)

这是静态的,因为数组是在堆栈上分配的,而不是在上。

它不是由内存管理器分配的,它只是保留在堆栈上,但仅此而已。一旦它超出范围,它就不再存在(在使用它的意义上会提供垃圾)。

请注意,由于堆栈有限,您将无法以这种方式分配如此大的数组。