c++ - 关于取消引用指针的困惑

标签 c++

如果我有以下代码片段,我对指针的取消引用感到困惑:

char str[]="ABC";
char *a=str;

那a+1指的是什么?

整体是B还是BC?

这种困惑在我心中开始出现,因为当我给予时:

cout<<a+1;

它给了我 BC 而不是 B,为什么会这样?

如果我有一个交换值的函数并且它接受如下参数:

void swap((a+1),(a+2))

上述函数将如何运行? 它会把 B 和 C 交换吗?

最佳答案

这是你的指针,a ,指向字符串“ABC”的开头(注意末尾的\0 代表隐式 NUL 终止符字节):

ABC\0
^
|
a

这是将一个添加到 a 后的样子:

ABC\0
 ^
 |
 a

请注意 a现在指向字符数组中的下一个条目。 cout 将打印字符,直到它到达数组末尾的 NUL 终止符字节,所以如果你执行 cout<<(a+1)它将打印“BC”。

关于c++ - 关于取消引用指针的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628479/

相关文章:

c++ - setbuf() 会影响 cout 吗?

C++:指针元素 vector 是否会在销毁时自动释放每个指针指向的动态内存?

c++ - GetSaveFileName/IFileSaveDialog - 用户输入事件/对文件名更改使用react?

c++ - 迭代合并排序,与冒泡排序速度相同

c++ - 为什么我的输出包含一个 0?

c++ - c/c++ 中的 winsock.h post 请求

c++ - 数据越大,内存分配错误

c++ - 数组偏移量和位#

c++ - 为什么我必须在 C++ 中按 enter 两次才能获取行?

c++ - Qt5.5 32bit 连接到 MySQL 数据库 - 受限用户帐户