'char **' 和 'const char **'的兼容性问题
来源:互联网 发布:最全企业网络个人投资 编辑:程序博客网 时间:2024/05/21 09:18
有时候必须非常专注的阅读ANSI C 标准才能找到某个问题的答案。一位销售工程师把下面的代码作为测试例子发给SUN的编译器小组。
#include<stdio.h> void foo( const char **P ) {} int main( int argc, char **argv ) { foo( argv ); return 0; } 在VC6.0下编译这段代码,编译器会发出警告: cannot convert parameter 1 from char ** to const char ** |
提交代码的工程师想知道为什么会产生类似的警告,他认为,实参char *s 与形参 const char *p 应该是相容的,标准库中所有的字符串处理函数都是这样的。那么,为什么实参 char **argv 与形参 const char **P实际上不能相容呢?答案是肯定的,它们并不相容。现在我们回顾一下标准中有关简单赋值的部分,它位于ANSI C 第
要使上述赋值形式合法,必须满足下列条件之一:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针
所指向类型的全部限定符。
正是这个条件,使得函数调用中实参char*能够与形参const char*匹配。它之所以合法,是因为在下面的代码中:
char *cp;
const char *cpp;
cpp = cp;
左操作数是一个指向有const限定符的char的指针;
右操作数是一个指向没有限定符的char的指针;
char类型和char类型是相容的,左操作数所指向的类型具有右操作数所指向类型的限定符(无), 再加上自身的限定符 const (注意反过来不能赋值)。
标准第
备注:解释的有些牵强,目前记住结果就可以了
- 'char **' 和 'const char **'的兼容性问题
- 'char **' 和 'const char **'的兼容性问题
- const char * 和char * const 的区别
- const char * 、 char const * 和 char * const
- char *和const char *
- const+char*+和+char*+const
- const char*和char* const
- const char*和char* const
- string const char *和char *的转换
- typedef char * pStr的问题和const char*, char const*, char*const的区别
- typedef char * pStr的问题和const char*, char const*, char*const的区别
- const char *,char * ,string,char []之间的关系和转换
- const char *|char const char * 与char * const 的区别
- char*,const char*和string
- char ** 和 const char ** 区别
- const char * 和 char const * 和 char * const 区别
- const char * 和 char const * 和 char * const 区别
- const char * 和 char const * 和 char * const 区别
- c# 中使用winapi
- [DragDraw]IIS的文件读写
- 给进行数据模型设计的同事的几点设计建议
- Configuring Multi-Boot Personal Computers(收藏)
- 简述WinCE开发特性及忠告 (ZT)
- 'char **' 和 'const char **'的兼容性问题
- 网络管理员教程
- 七月解题日志1
- 使用vector实现矩阵,并计算N阶矩阵的行列式
- 程序员四大忌(转载)
- 中文搜索相关分析
- MS SQL Server中的表的某些字段导入到MySql的表中相应字段的方法
- GSM手机SMS编码解码
- SQL数据库操作基本语句