何时使用const *与const * const?

时间:2014-01-13 17:33:05

标签: c

我见过代码,人们将使用const作为函数的参数。使用const * vs const * const有什么好处?这可能是一个非常基本的问题,但如果有人能够解释,我将不胜感激。

Bool IsThisNumberEqualToFive(int const * num)
{
    return(Bool)(5 != num );
}

Bool IsThisNumberEqualToFive(int const * const num)
{
    return(Bool)(5 != num );
}

3 个答案:

答案 0 :(得分:6)

  • 在第一个版本中,你承诺你不会写信给 num指向
  • 的对象
  • 在第二个版本中,您承诺并且您也会阻止自己 (即IsThisNumber ..)从使num指向别的东西。

也就是说,除了指针对象之外,在第二个版本中指针本身也是const

答案 1 :(得分:2)

参数

int const * num  // num is a pointer to const int. 

const正在保护num点。程序可以改变num但不改变*num的值。而对于

int const * const num  // num is a const pointer to const int

最左边const正在保护num点,而最右边是保护指针num自己。在这种情况下,num*num都不会修改。

注意:了解

的内容
T const *p;  // T is any valid type

意味着(更准确地说) 这意味着,程序可以使用表达式p来改变p指定的指针对象的值,但它不能使用表达式*p来改变任何值*p可能指定的对象。 如果程序有另一个非限定类型的表达式e,指定*p也指定的对象,程序仍然可以使用e来更改该对象。< / p>

答案 2 :(得分:1)

消息来源越多告诉编译器变量的值会发生什么变化(或者更好的“发生”,就像const变量所预期的那样)事先就越好了编译器可以选择。