[英]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,则foo
和f1
不应采用const int *
值。 他们应该采用int *
值。
我不想修改常量。 我想修改指向它的指针(foo()中的p)
所以,你得到了一个指针。 你想增加指针。 所以就这样做:
void foo(const int *data) {
const int *p = data;
data++;
}
您已经增加了指针。 这不会影响foo
的调用者,因为指针本身是按值复制的。
再次检查,这段代码是正确的。 它不应该产生您声称的错误。
编辑:您解决了无效问题,因此相应地修改了答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.