c-这个数组是静态的还是动态的



所以我正在研究内存分配,它说只能使用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] = '';
    printf("%s",words);
    getch();
    return(0);
}

这是一个可变长度的数组。大小确实是动态的,但在实践中,它通常会在堆栈上而不是堆上分配(所以不要将其用于太大的东西)。

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

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

数组是本地数组,一旦定义它的作用域({})结束,它将自动解除分配
从技术上讲,该标准没有定义它应该分配到哪里,而只定义了这样一个数组必须提供的特性。该标准甚至没有提到堆栈或堆

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

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

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

相关内容

  • 没有找到相关文章

最新更新