【发布时间】:2013-04-18 19:47:34
【问题描述】:
我试图理解一件事。
我知道我不能改变常量指针的值,但是我可以改变它的地址,如果我用下面的方式初始化一个指针:
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 关键字将无法按预期工作。真的吗?如果是这样,那是什么原因呢?
【问题讨论】:
-
拒绝学习新的编程语言 - 我喜欢这个网站:P
-
@userXXX 因为没有表现出足够的研究努力而投反对票。我喜欢懒惰的用户:P
-
@user2252786 您已经从网站上的四位顶级人物那里获得了全面的答案。
-
这就是我说我喜欢这个网站的原因:P
-
我很欣赏这个问题。我很高兴人们有足够的勇气提出这些“简单”的问题,即使他们被指责“搞砸”了“很多”事情。
标签: c++