我有这个函数签名:
void myFunction(int *const ptr);
在这个特定的上下文中
const
关键字有什么意义?即使
ptr
不是 const
变量,我也无法修改它指向的地址,因为它是按值传递的,所以如果我有另一个这样的函数:void myAnotherFunction(int *ptr);
在它的实现中做了这样的事情:
//...
ptr = malloc(1023);
//...
这不会影响传递的值(当然在这个函数之外)。
所以问题是:使用
myFunction()
签名而不是 myAnotherFunction()
签名有什么意义? (除此之外,您还会收到编译时错误)。 最佳答案
总结。确实这样原始指针不会受到影响(它仍然会指向同一个对象,因为 ptr
是原始指针的副本),但是您仍然可以使该指针指向 myAnotherFunction
内的不同对象并通过该指针更改该对象的值.例如在 myAnotherFunction
你可以这样做:
ptr = &y;
*ptr = 9;
而在第一种情况下,当您有一个常量指针时,您无法为其分配新地址,但您仍然可以使用取消引用更改它指向的对象的值。常量指针意味着您不能为其分配新地址,指向常量对象的指针意味着您无法更改其指向的对象的值,但您可以为指针分配新地址。
关于c - const 指针作为函数参数的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32926031/