所以我正在研究内存分配,它说你只能使用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);
}
答案 0 :(得分:4)
那是variable-length array。大小确实是动态的,但实际上它通常被分配在堆栈而不是堆上(因此不要将它用于任何太大的东西)。
根据您的编译器等,这可能最终比分配堆内存快得多,只不过是对堆栈指针的调整。
可变长度数组是在C99标准中引入的,因此请记住,您无法在非常旧的C编译器(例如MSVC)中使用它们。
答案 1 :(得分:1)
数组是 本地数组 ,一旦范围(<{1)将 自动 解除分配定义它的结尾。},{
)
从技术上讲,标准没有定义应该分配的位置,而只定义了阵列必须提供的特性。该标准甚至没有提到堆栈或堆:
答案 2 :(得分:0)
这是静态的,因为数组是在堆栈上分配的,而不是在堆上。
它不是由内存管理器分配的,它只是保留在堆栈上,但仅此而已。一旦它超出范围,它就不再存在(在使用它的意义上会提供垃圾)。
请注意,由于堆栈有限,您将无法以这种方式分配如此大的数组。