const修饰的双重指针赋值解惑
2014-04-09 10:57
169 查看
在c程序中,我们可能经常会使用到指针之间的赋值。
传统的赋值操作:
会正常打印出*cpp所指的字符。但是下面的这段代码,就会出现问题:
编译的时候提示,出现错误:
这是为什么呢?
原来还是const修订符搞的怪:
第一段代码中:
cp是一个指向char类型的指针。
ccp是一个const修饰符修饰的指向char类型的指针,也就是说,它指向的是char类型,但是指针本身是不可修改的。
在ANSI C标准中,有这么一段:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边的指针所指向的类型必须具有右边的全部限定符。
也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp中包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。
这样,我们看一下面的代码:
c是一个指向char类型指针的指针。
cc是一个指向const修饰符修饰的char类型的指针的指针。
cc 与 c指向的内容并不相同,因此无法进行赋值操作。因此出现提示错误:error C2440: “=”: 无法从“char **”转换为“const char **”
传统的赋值操作:
char *cp = "c"; const char *ccp; ccp = cp; printf("*ccp:%c",*ccp);
会正常打印出*cpp所指的字符。但是下面的这段代码,就会出现问题:
char **c = &cp; const char **cc; cc = c; printf("**cc:%c",**cc);
编译的时候提示,出现错误:
1>------ 已启动生成: 项目: oj1511, 配置: Debug Win32 ------ 1>生成启动时间为 2014/4/9 10:48:22。 1>InitializeBuildStatus: 1> 正在创建“Debug\oj1511.unsuccessfulbuild”,因为已指定“AlwaysCreate”。 1>ClCompile: 1> oj1510.cpp 1>e:\workspace\oj1511\oj1511\oj1510.cpp(11): error C2440: “=”: 无法从“char **”转换为“const char **” 1> 转换丢失限定符 1> 1>生成失败。 1> 1>已用时间 00:00:00.36 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这是为什么呢?
原来还是const修订符搞的怪:
第一段代码中:
cp是一个指向char类型的指针。
ccp是一个const修饰符修饰的指向char类型的指针,也就是说,它指向的是char类型,但是指针本身是不可修改的。
在ANSI C标准中,有这么一段:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边的指针所指向的类型必须具有右边的全部限定符。
也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp中包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。
这样,我们看一下面的代码:
c是一个指向char类型指针的指针。
cc是一个指向const修饰符修饰的char类型的指针的指针。
cc 与 c指向的内容并不相同,因此无法进行赋值操作。因此出现提示错误:error C2440: “=”: 无法从“char **”转换为“const char **”
相关文章推荐
- const修饰指针
- 指针常量与常量指针( const修饰 )
- 关于const常量与指针赋值的问题
- const 修饰 指针
- C++中const修饰指针探讨
- const 修饰变量赋值的时刻
- 【C/C++学院】0820-Nullptr/const对象/类指针引用以及mallocfree与newde/类重载运算符/QT加法重载/类的重载赋值运算/自增在前在后差别/赋值重载深浅拷贝/重载下标
- const修饰指针的用法:常量指针和指针常量
- c++ const修饰指针
- 含const的双重指针解析
- const修饰指针的情况分析
- const类型指针与普通指针相互赋值
- const*与*const,const修饰指针的一种简单记忆方法
- c++中 const修饰指针的理解与记忆法
- 关于const修饰指针的情况
- 带有const修饰的指针解读
- const 修饰指针的问题
- const修饰指针和引用的用法
- const修饰指针
- 关于const修饰指针