使用指针可以将字符串初始化为其他字符,但是一旦定义了字符串,就无法将其初始化为其他字符。这背后的原因是什么?
int main()
{
char str1[]="hello";
char *p="hello";
str1="bye";/*error*/
p="bye";/*works*/
}
使用指针可以将字符串初始化为其他字符,但是一旦定义了字符串,就无法将其初始化为其他字符。这背后的原因是什么?
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 语言不支持您尝试执行的操作。
数组是数组,指针是指针。定义数组给出了指向分配数组的指针,这是一个指向数组空间已被保留的位置的常量指针。这是 lifo 堆栈中的具体地址。所以,str1 是一个常量指针值,你不能改变它。您不能设置不同常量字符串的地址值。
将指针定义为 char*p,可为您提供地址的变量值。因此,您可以更改变量 p 的值。