为什么double类型的参数与const double类型的参数不兼容**

时间:2015-02-02 20:45:06

标签: c

当我将double **传递给期望const double **的函数时,我收到一条关于从gcc传递不兼容指针类型的消息。这让我感到困惑,因为const double **只会对传入的参数的使用施加更多约束。这与将double *传递给期望const double *的函数有什么不同?

稍后添加:将double **传递给期望const double * const *的函数同样有问题,任何想法可能会出错?

1 个答案:

答案 0 :(得分:5)

如果您通过值传递指针const T,则该函数无法编辑调用者的指针,也无法编辑T,因此一切都是安全的。

如果您通过值传递指针指向const T的指针,则该函数无法编辑T,但可以编辑第二个指针。由于指针类型不同(const vs mutable),这可能会造成破坏。

static const double PI = 3.14;
void function(const double** p)  {
  *p = Π //point at the const double PI
}
int main() {
    double* p;
    function(&p); //pass pointer to pointer to double
    *p = -1; //changing a static const global!  That's bad!
} 

Matt McNabb观察到,如果参数为const double*const*,则C ++会允许它,C认为不是,可能是由于简单的疏忽。