在C中,为什么指定char-variable变量的值在分配后不能改变?

sav*_*v0h 7 c pointers variable-assignment

我不明白这种情况的区别:

#include <stdio.h>

int main()
{
  int i = 0;
  i = 1;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种情况:

#include <stdio.h>

int main()
{
  char *mychar = "H";
  *mychar = "E";

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译器警告"赋值使指针在没有强制转换的情况下生成整数".

不应该*mychar = "E"取消引用mychar为其赋值"E"?

非常感谢.

gio*_*gim 6

你混淆了一些事情.

  • 注意"E"实际上是const char[]哪个存储'E''\0'.它不是一个单一的角色.对于单个字符,你使用'',就像'E'.
  • mychar 指向字符串文字,您不能更改字符串文字.

如果您的想法是这样的:

 char *mychar = "H";
 mychar = "E"; 
Run Code Online (Sandbox Code Playgroud)

这没关系,你没有改变字符串文字,只是第一次指针mychar指向字符串文字"H",然后指向"E".

这你不能这样做:

  char *mychar = "Hello";
  *mychar = 'E'; // Can't modify the string literal
Run Code Online (Sandbox Code Playgroud)

但是你可以这样做:

  char c = 0;
  char *mychar = &c;
  *mychar = 'E'; // This is ok
Run Code Online (Sandbox Code Playgroud)


Chr*_*ies 4

“E”是字符串文字 (char*),“E”是字符文字 (char)。

请注意,您正在比较的两段代码并不相似!两段代码(int vs char*)之间的区别如果你写的话会更清楚

char* mychar = "H";
*mychar = "E";
Run Code Online (Sandbox Code Playgroud)

int示例对应的类型是(char*)。也就是说,类似于“int”示例的代码是

char* mychar = "H";
mychar = "E";
Run Code Online (Sandbox Code Playgroud)