以下两种在C语言中创建数组的方法是什么?
int main( void )
{
int *array = malloc(sizeof(int) * 10);
int array2[10];
}
我的想法是方法二是方法一的语法糖,但我不确定。
此外,在这些声明之后,array和array2包含了什么?我知道数组是一个指向数组开头的指针,但是数组初始化为什么?对于array2怎么样?
答案 0 :(得分:5)
它们不是远程等效的。这样:
int *array = malloc(sizeof(int) * 10);
将分配堆的内存块,并为您提供指向该内存的指针。
此:
int array2[10];
将在堆栈上分配一些内存。阅读关于堆栈和堆内存的优秀答案:What and where are the stack and heap?