让我们考虑这样的应用程序:
void foo (char* const constPointerToChar) {
// compile-time error: you cannot assign to a variable that is const
constPointerToChar = "foo";
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str = "hello";
foo(str);
printf(str);
return 0;
}
让我们删除const
关键字:
void foo (char* pointerToChar) {
pointerToChar = "foo";
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str = "hello";
foo(str);
printf(str);
return 0;
}
输出是hello
. 因此,即使允许函数更改指针,它也会更改它的指针副本,而原始指针没有更改。
这是意料之中的,因为指针是按值传递的。
我确实理解为什么事情会这样工作,但我不明白为什么有人需要将参数声明为X* const
.
当我们声明函数参数时,X* const
我们说“好的,我保证在我的函数中我不会修改我自己的指针副本。” 但是为什么调用者应该关心他从未见过和使用的变量会发生什么?
我是否更正了声明函数参数X* const
是无用的?