const 指针作为函数参数的含义
Meaning of const pointers as function parameters
我有这个函数签名:
void myFunction(int *const ptr);
在此特定上下文中,const
关键字有什么意义?
即使 ptr
不是 const
变量,我也无法修改它指向的地址,因为它是按值传递的,所以如果我有另一个这样的函数:
void myAnotherFunction(int *ptr);
在它的实现中做了这样的事情:
//...
ptr = malloc(1023);
//...
这不会影响传递的值(当然在这个函数之外)。
所以问题是:使用 myFunction()
签名而不是 myAnotherFunction()
签名有什么意义? (除此之外,您还会遇到编译时错误)。
ptr = malloc(1023);
This wound't affect the passed value (outside this function, of
course).
总结一下。事实上,原始指针不会受到影响(它仍然指向同一个对象,因为 ptr
是原始指针的副本),但您仍然可以使该指针指向 myAnotherFunction
中的另一个对象并且通过该指针更改该对象的值。例如在 myAnotherFunction
你可以做:
ptr = &y;
*ptr = 9;
而在第一种情况下,当你有一个常量指针,你不能给它分配一个新地址,但你仍然可以改变它指向的对象的值使用解除引用的点。常量指针意味着您不能为其分配新地址,指向常量对象的指针意味着您不能更改它指向的对象的值,但您可以为指针分配新地址。
如果您认为函数
可能更有意义
void myFunction(int *const ptr);
可能正在操纵许多指针,对它们进行赋值和重新赋值,并且它正在执行的算法的一个不变性是永远不应更改输入指针。然后,将其标记为 const
可能会非常有帮助,或者至少让您更有信心它已正确实施。
我有这个函数签名:
void myFunction(int *const ptr);
在此特定上下文中,const
关键字有什么意义?
即使 ptr
不是 const
变量,我也无法修改它指向的地址,因为它是按值传递的,所以如果我有另一个这样的函数:
void myAnotherFunction(int *ptr);
在它的实现中做了这样的事情:
//...
ptr = malloc(1023);
//...
这不会影响传递的值(当然在这个函数之外)。
所以问题是:使用 myFunction()
签名而不是 myAnotherFunction()
签名有什么意义? (除此之外,您还会遇到编译时错误)。
ptr = malloc(1023); This wound't affect the passed value (outside this function, of course).
总结一下。事实上,原始指针不会受到影响(它仍然指向同一个对象,因为 ptr
是原始指针的副本),但您仍然可以使该指针指向 myAnotherFunction
中的另一个对象并且通过该指针更改该对象的值。例如在 myAnotherFunction
你可以做:
ptr = &y;
*ptr = 9;
而在第一种情况下,当你有一个常量指针,你不能给它分配一个新地址,但你仍然可以改变它指向的对象的值使用解除引用的点。常量指针意味着您不能为其分配新地址,指向常量对象的指针意味着您不能更改它指向的对象的值,但您可以为指针分配新地址。
如果您认为函数
可能更有意义void myFunction(int *const ptr);
可能正在操纵许多指针,对它们进行赋值和重新赋值,并且它正在执行的算法的一个不变性是永远不应更改输入指针。然后,将其标记为 const
可能会非常有帮助,或者至少让您更有信心它已正确实施。