c++指针指向指针

C++ Pointer to Pointer

本文关键字:指针 c++      更新时间:2023-10-16

我想要有一个指向常量的指针,并将其地址传递给一个函数,使其自增。

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**)’

}

如何声明指针?

Try

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**

This:

const int *data;

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

(*data) = 5;

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

如果取const int *的地址,则得到const int **,这是指向常量整数的指针。所以你仍然不能改变这个整数。任何这样做的尝试都会导致编译器报错。

如果你希望能够改变整型,那么foof1不应该取const int *的值。它们应该取int *值。


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

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

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

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

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

编辑:你修复了空格问题,所以答案相应修改。