编译器如何为未指定维度的数组分配内存?

How compiler allocates memory to the array of unspecified dimension?

例如。 char s[]="Hello";

据我所知,字符串常量存储在堆栈内存中,未指定维度的数组存储在堆内存中。如何为上述语句分配内存?

首先声明:

int s[]="Hello";

不正确。编译器将报告错误,因为在这里你试图用 string.

初始化 int 数组

以下部分答案是基于假设有错字,正确的说法是:

char s[]="Hello";

As per my knowledge, string constants are stored in stack memory and array with unspecified dimension are stored in heap memory.

我会说你需要改变你获取知识的来源。

字符串常量(也称为字符串文字)不存储在堆栈内存中。如果不在堆栈中,那么在哪里?检查 this.

在声明中:

char s[]="Hello";

不会有任何内存分配,但这是 char 用字符串常量初始化的数组。 每当我们写一个用双引号括起来的字符串时,C 会自动为我们创建一个字符数组,包含该字符串,以 [=18=] 字符结束。

如果我们省略维度,编译器会根据初始化器的大小为我们计算它(这里是 6,包括终止 [=18=] 字符)。

所以给定的语句等同于:

char s[]={'H','e','l','l','o','[=13=]'};

也可以写成:

char s[6]={'H','e','l','l','o','[=14=]'};