c++ - 基本 C++ 字符串指针

标签 c++ c pointers

为什么它没有在第 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/

相关文章:

c - 在 c 头文件中使用 define

c - fork之后,全局变量是共享的吗?

android - 指南 : How to compile a c program for Android

c++ - 调用遗留 C API 时,如何在现代 C++ 中正确地将指向结构的指针转换为指向其他结构的指针?

c++ - 如何以编程方式启动程序并在 Linux 上以 root 权限运行它?

c++ - 无锁堆栈 - 这是 c++11 宽松原子的正确用法吗?可以证明吗?

c++ - 清除包括换行符的输入缓冲区

c++ - 这个功能有什么问题?它使我的程序崩溃而没有错误

pointers - Go 中的函数返回一个新的 slice 或指向第一个 slice 的底层数组的 slice ?

C++如何使用指针将 vector 的值相乘?