所以我正在研究内存分配,它说只能使用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)一起使用。
数组是本地数组,一旦定义它的作用域({
、}
)结束,它将自动解除分配
从技术上讲,该标准没有定义它应该分配到哪里,而只定义了这样一个数组必须提供的特性。该标准甚至没有提到堆栈或堆
这是静态的,因为数组分配在堆栈上,而不是堆。
它不是由内存管理器分配的,它只是在堆栈上保留的,但仅此而已。一旦超出范围,它就不存在了(从某种意义上说,使用它将提供垃圾)。
请注意,由于堆栈是有限的,您将无法以这种方式分配这么大的数组。