繁体   English   中英

C++ 指针指向指针

[英]C++ Pointer to Pointer

我想要一个指向常量的指针,并将它的地址传递给 function 它将增加它。

int f1(const int **ptr) {
    int n = **ptr; //use pointer
    (*ptr)++; //increment pointer
    return n;
}

void foo(const int *data) {
    const int *p = data;
    const int n = f1(&p); //error: invalid conversion from ‘const int**’ to ‘int**’
                          //error:   initializing argument 1 of ‘int LevelLoader::readWord(byte**)’


}

如何声明指针?

尝试

int f1(const int *& ptr) {
  int n = *ptr;
  ++ptr; 
  return n;
}

void foo(const int *data) {
  const int *p = data;
  const int n = f1(p); 
}

反而。

错误消息表明LevelLoader::readWord不采用const byte**

这个:

const int *data;

是一个指向常量integer 的指针。 这意味着您不允许更改 data 指向的data 您可以读取和复制数据,但不能:

(*data) = 5;

这在 C++ 中是非法的,因为它被声明为const int *

如果你获取一个const int *的地址,你会得到一个const int ** ,它是一个指向常量integer 的指针的指针。 所以你仍然不能改变 integer。 任何这样做的尝试都会导致编译器抱怨。

如果您希望能够更改 integer,则foof1不应采用const int *值。 他们应该采用int *值。


我不想修改常量。 我想修改指向它的指针(foo()中的p)

所以,你得到了一个指针。 你想增加指针 所以就这样做:

void foo(const int *data) {
    const int *p = data;
    data++;
}

您已经增加了指针。 这不会影响foo的调用者,因为指针本身是按值复制的。

再次检查,这段代码是正确的。 它不应该产生您声称的错误。

编辑:您解决了无效问题,因此相应地修改了答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM