C 一旦定义,字符串不能初始化为其他字符?

C 一旦定义,字符串不能初始化为其他字符?,c,C,使用指针可以将字符串初始化为其他字符,但一旦定义了字符串,就无法将其初始化为其他字符。其背后的原因是什么 int main() { char str1[]="hello"; char *p="hello"; str1="bye";/*error*/ p="bye";/*works*/ } 您已经将str1定义为数组,而数组是不可分配的 但是,您可以将其他数据复制到阵列中,例如: char str1[] = "hello"; strcpy(str1, "bye"); 要更改数组中的字符(如正

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

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

您已经将str1定义为数组,而数组是不可分配的

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

char str1[] = "hello";

strcpy(str1, "bye");

要更改数组中的字符(如正在执行的操作),必须使用函数(如
strcpy
)或逐个索引

str1[0] = 'p';
将打印出
pello


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

数组是数组,指针是指针。定义数组将给出指向已分配数组的指针,即指向已保留数组空间的位置的常量指针。这是后进先出堆栈中的一个具体地址。因此,str1是一个常量指针值,您不能更改它。不能设置其他常量字符串的地址值


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

Nick:在这种情况下,*(在“char*p”中)表示p是指针变量。也就是说,变量p不包含字符,而是指向内存中存在character.pl的位置的地址。另请参阅一些有用的链接一个更相关的副本将讨论如何使用
strcpy()
等来分配字符串。拟议的副本没有做到这一点。其他问题可能更合适。随意搜索发现:和。