C中的数组创建语法

Ada*_*dam 2 c arrays syntax

以下两种在C中创建数组的方法是否相同?

int main( void )
{
    int *array = malloc(sizeof(int) * 10);
    int array2[10];
}
Run Code Online (Sandbox Code Playgroud)

我的想法是方法二是方法一的语法糖,但我不确定.

另外,在这些声明之后,array和array2包含了什么?我知道数组是指向数组开头的指针,但是数组初始化为什么?对于array2怎么样?

Fan*_*Fox 5

它们并不等同.这个:

int *array = malloc(sizeof(int) * 10);
Run Code Online (Sandbox Code Playgroud)

将分配堆的内存块,并为您提供指向该内存的指针.

这个:

int array2[10];
Run Code Online (Sandbox Code Playgroud)

将在堆栈上分配一些内存.阅读关于堆栈和堆内存的优秀答案:堆栈和堆的内容和位置是什么?

  • @Adam你似乎在说他们"基本上是等同的,除了<列出他们不等同的所有方式>".除此之外,雕像和橙子基本相同,只是雕像是艺术品,橙子是水果,雕像比橙子大,橙子可食用而雕像不是,橙子是商品,而雕像通常是独一无二的,等等. (2认同)