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 条评论
放弃编程了!年纪大了!你们继续努力~~~哈哈!
[…] About const concept in C/C++, I have 2 articles. 《c专家编程》阅读笔记-关于const指针 http://sunxiunan.com/?p=1161 技术笔记-关于c/c++中的const […]