编译器如何为未指定维度的数组分配内存?
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=]'};
例如。 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=]'};