所以我正在研究内存分配,它说你只能使用 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);
}

最佳答案

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

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

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

关于c - 这个数组是静态的还是动态的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12303944/

10-12 07:03