《c专家编程》阅读笔记-关于const指针

p19,两个操作数都是指向有限定符或者无限定符的相容类型的指针。左边指针必须具有所有右边指针所指向类型的全部限定符。

函数原型void foo(const char** p)

当我们使用这样的调用,会有警告:

char* p = NULL;  foo(&p);

但是当函数原型是void foo2(const char* p),

如下调用就没有问题:

char* p = NULL;  foo(p);

原因很简单,对于const char** p来说,我们一层层剥掉*,就是这样

形参p是一个指针,指向const char*类型。

当我们使用char* p = NULL;  foo(&p);这样形式,实参p是一个指针,指向char*类型。

他两个都是没有限定符的,限定符const都是被指向的类型所使用了。

所以,第一种调用不成功。但是对于第二种来说,就是成功的,因为形参具有所有实参的限定符(形参有const,实参没有)。

另外,在ubuntu下使用gcc编译器,会有这个警告,但是vc2008没有,不知道是不是vc2008项目配置错了。

《《c专家编程》阅读笔记-关于const指针》有2个想法

发表评论