为什么它没有在第 2 行抛出错误?
char *p = "Hello";
p = "Bye";
*p
是变量,所以 p
是变量 *p
的地址。
请有人解释一下上面的代码是什么情况?
最佳答案
*p
不是“变量”。 p
是变量,它是一个指针。 C 和 C++ 的声明语法看起来很奇怪,您可以在其中使用与访问变量相同的语法来声明变量。
char *p;
在该声明中,我们声明了 p
,而不是 *p
,而是将 p
声明为 p
*p
需要成为 char
char *p = "Hello";
现在它可能更不直观了,因为 =
右边的东西是 p
的初始值而不是 的初始值*p
。这就是 C 和 C++ 的工作方式,并且很容易习惯和理解,即使其左右两侧的含义最初看起来有悖常理。
所以你的例子:
char *p = "Hello";
p = "Bye";
我明白为什么不了解 C 或 C++ 的人可能会认为在第一行和第二行使用 p
的间接级别不同。但实际上在这两行上,p
都是一个指针,文本文字的地址存储在该指针中。
关于c++ - 基本 C++ 字符串指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838895/