0

使用指针可以将字符串初始化为其他字符,但是一旦定义了字符串,就无法将其初始化为其他字符。这背后的原因是什么?

int main()
{
char str1[]="hello";
char *p="hello";
str1="bye";/*error*/
p="bye";/*works*/
}
4

3 回答 3

1

您已定义str1为数组,并且数组不可分配。

但是,您可以将其他数据复制到数组中,例如:

char str1[] = "hello";

strcpy(str1, "bye");
于 2012-07-08T08:19:01.050 回答
0

要更改数组中的字符,例如您正在做的事情,您必须使用一个函数,strcpy或者按索引进行索引。

str1[0] = 'p';

将打印出来pello

C 语言不支持您尝试执行的操作。

于 2012-07-08T08:19:06.667 回答
0

数组是数组,指针是指针。定义数组给出了指向分配数组的指针,这是一个指向数组空间已被保留的位置的常量指针。这是 lifo 堆栈中的具体地址。所以,str1 是一个常量指针值,你不能改变它。您不能设置不同常量字符串的地址值。

将指针定义为 char*p,可为您提供地址的变量值。因此,您可以更改变量 p 的值。

于 2012-07-08T08:23:25.540 回答