const修饰的双重指针赋值解惑
时间:2022-04-22
本文章向大家介绍const修饰的双重指针赋值解惑,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在c程序中,我们可能经常会使用到指针之间的赋值。
传统的赋值操作:
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> 正在创建“Debugoj1511.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> oj1510.cpp
1>e:workspaceoj1511oj1511oj1510.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 **”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- js 停止事件冒泡 阻止浏览器的默认行为(阻止a标签跳转 )
- EmitMapper的使用小结
- js .map方法
- 【一起学系列】之模板方法:写SSO我只要5分钟
- ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
- 【一起学系列】之迭代器&组合:虽然有点用不上啦
- 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法
- 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
- scipy.stats连续分布的基本操作
- InvocationHandler中invoke方法中的第一个参数proxy的用途
- height、offsetheight、clientheight、scrollheight、innerheight、outerheight
- mysql sql-mode 解析和设置
- JAVABEAN EJB POJO区别
- @Component和@Bean以及@Autowired、@Resource
- mybatis generator and 和or条件