c++ - 如何在C++中增加指针的指针值

标签 c++ pointers

我一直在阅读指针在 C++ 中的工作原理,我试图稍微弄乱它,但程序停止工作了。

#include <iostream>
using namespace std;

int main ()
{
  char a[] = "Hello";
  char * b = a;
  char ** c = &b;

  cout << *(b+1) << endl;
  //cout << **(c+2) << endl;
  return 0;
}

如果注释行未被注释,程序将停止工作,错误代码:0xC0000005。我做错了什么还是这是某种错误?

最佳答案

这里:

char a[] = "Hello";
char * b = a;

您正在利用数组到指针的衰减。所以现在 b 指向 a[0]。也就是说,b 保存着 a[0]

的地址

然后

char ** c = &b;

c 现在指向 b地址,它本身就是一个指针。 c 保存了 b 的地址,它保存了 a 的地址(明白为什么现在人们讨厌指针了吗?)

如果你想从c访问a[0],你首先需要取消引用它:

*c

它给出 b,然后我们需要取消引用 that 以返回到 a[0]:

*(*c)

如果你想使用指针算法访问a[1],你想递增b,所以:

*c+1

现在我们有了 a[1] 的地址,如果我们想打印它,我们需要再次取消引用:

*(*c+1)

当你说:

**(c+2)

c 保存了 b 的地址,而不是 a,因此对其递增会导致未定义的行为。

关于c++ - 如何在C++中增加指针的指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34515367/

相关文章:

c++ - 忽略转义序列 C++

c++ - 将 std::string 转换为 const char* 供 printf 消费

c - 在不知道其类型的情况下,释放为指向指针的指针分配的所有空间

c++ - std::function不起作用,但是普通的旧函数指针起作用-为什么?

c++ - 更改 char 变量值并使用指针打印

c - 我在我的 printf 函数中使用了 *pointer+1,但它并没有像我想的那样。为什么?

c++ - 如何比较和存储 2 个 vector 位置的数据元素?

c++ - 线程化传递字符串参数的 bool 函数

c++ - ifstream get() 不填充字符数组

c++ - 错误(std::bad_array_new_length) in a 2d array textbook example (Absolute C++, Savitch)