让我们考虑这样的应用程序:
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
是无用的?