假设我像这样初始化一个数组:
char a[]="test";
这是为了什么目的?我们知道内容可能会立即更改,因为未分配,因此有人会为此初始化数组?
答案 0 :(得分:5)
澄清一下,由于OP所述的原因,这段代码是错误的:
char* a;
strcpy(a, "test");
正如其他回复所述,语法“char a [] =”test“”实际上并不这样做。实际效果更像是这样:
char a[5];
strcpy(a, "test");
第一个语句在本地堆栈上分配固定大小的静态字符数组,第二个语句初始化其中的数据。大小由字符串文字的长度确定。与所有堆栈变量一样,该数组在退出函数范围时自动释放。
答案 1 :(得分:1)
这样做的目的是在堆栈或静态数据段上分配五个字节(取决于此代码段发生的位置),然后将这些字节设置为数组{'t','e','s','t','\0'}
。
答案 2 :(得分:1)
此语法在堆栈上分配一个包含五个字符的数组,相当于:
char a[5] = "test";
数组的元素初始化为作为初始化程序给出的字符串中的字符。确定数组的大小以适合初始化程序的大小。
答案 3 :(得分:1)
分配。该代码相当于
char a[5]="test";
当你输出数字时,编译器只需通过计算文字字符串中的字符来计算字符数组的长度。然后它将长度加1,以包括必要的终止nul '\0'
。因此,数组的长度为5,而字符串的长度为4。
答案 4 :(得分:0)
数组已分配;它的大小是从用于初始化它的字符串文字中推断出来的(总共5个字符)。
你写过吗
char *a = "test";
然后所有将被分配的将是一个指针变量,而不是一个数组(字符串文字"test"
存在于内存中,以便它在程序启动时分配并保持到程序退出)。