我试图理解一件事。
我知道我不能改变常量指针的值,但我可以改变它的地址,如果我用以下方式初始化一个指针:
int foo = 3;
const int *ptr = &foo;
*ptr = 6; // throws an error
int bar = 0;
ptr = &bar; // foo == 0
现在,假设我声明(/define,我不记得是哪一个)一个函数:
void change(const int arr[], int size);
int main() {
int foo[2] = {};
change(foo, 2);
std::cout << foo[0];
}
void change(const int arr[], int size) {
// arr[0] = 5 - throws an error
int bar = 5;
arr = &bar;
}
上面代码的最后一行不会引发任何错误。但是,当函数结束并且我显示第一个元素时,它显示 0 - 所以没有任何改变。
为什么呢?
在这两种情况下,我都有常量指针,我尝试更改它的地址。在第一个示例中它有效。在第二个中它没有。
我还有一个问题。有人告诉我,如果我想将两指针类型传递给函数, const 关键字将无法按预期工作。真的吗?如果是这样,那是什么原因呢?