【发布时间】:2015-10-03 18:32:44
【问题描述】:
我有这个函数签名:
void myFunction(int *const ptr);
const 关键字在此特定上下文中的意义何在?
即使ptr 不是const 变量,我也无法修改它指向的地址,因为它是按值传递的,所以如果我有另一个这样的函数:
void myAnotherFunction(int *ptr);
在它的实现内部做了这样的事情:
//...
ptr = malloc(1023);
//...
这不会影响传递的值(当然是在这个函数之外)。
所以问题是:使用myFunction() 签名而不是myAnotherFunction() 有什么意义? (除了你得到一个编译时错误)。
【问题讨论】:
-
这对于重构很有用。例如,将一段代码提取到 ptr 曾经是局部变量的函数中。
const是检查ptr在该块期间未更改的好方法,这会使新代码具有不同的行为。 -
注意:最小原型仍然是
void myFunction(int *);它不关心int *const ptr,因为它必然会在函数结束时被删除,所以它忽略了它;它会影响函数内的作用域。
标签: c parameter-passing const-correctness const-pointer