OsChina上一个朋友给出的例子,很能说明问题:

typedef char * CharPtr;const CharPtr mycharptr = "Hello, World";mycharptr[0]='h'; //OK[1]mycharptr = "It's Wrong"; //Err[2]

如果把CharPtr替代掉的话,那么似乎[1]是错的,[2]是对的,因为const char *是指向const char的指针,指针可以指向别的,但是指向的内容不能变。实际上,const只是编译器的一种规范,所以编译的时候只按照语法检查是不是改变了,char*被typedef之后,可以当成一种简单类型看,那么const CharPtr 就只一个CharPtr型的常量,对它的赋值肯定会引起编译错误,而[0]这种寻址并不影响。

不过,如果把typedef 改为宏替换(如下),事情就不一样了,毕竟宏替换只是一种替换而已,不会引起编译器的检查,编译之前,CharPtr就已经被替换掉了。

#define CharPtr char *
const CharPtr mycharptr = "Hello, World";mycharptr[0]='h'; //Errmycharptr = "It's Wrong"; //OK

转载于:https://www.cnblogs.com/sdqxcxh/archive/2012/05/10/2494164.html

关于Const指针的一点补充相关推荐

  1. 指针增量和数组的关系,指针偏移的补充,(重要面试),gdp调试,将数组中的n个元素逆序存放

    1.指针增量和数组的关系 //加1  代表了地址偏移了一个类型的字节数(整形数偏移四个字节,char形数偏移了一个字节) 再来下标法: 2.指针偏移的补充 也可以换一种写法(第12行) 但是呢同样的代 ...

  2. const的理解、const指针、指向const的指针

    1.const 的理解 const 是C语言的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量(也就是不可以作为左值),绝对不是将这个变量变为常量.也就是说经过const 修饰的 ...

  3. 超详细的const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  4. const与指针:指向const的指针与const指针的区别

    指针,可以说是C语言编程的掌上明珠,而将const应用于指针,会产生一些挺微妙的现象. 指向const的指针 第一种用法是令指针指向一个常量,称之为指向const的指针,可以防止使用该指针修改所指向对 ...

  5. const指针强转为非const指针后的赋值问题

    #include <iostream>using namespace std;int main() {const int a = 5;const int * p = &a;int ...

  6. const指针 与指向const的指针的区别

    const 指针与指向const的指针 当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容.听起来有点混淆一会放个例子上来就明白了. ...

  7. C++ Const指针学习

    Const指针 const指针顾名思义就是常量指针的意思.下面将通过一些具体例子说明const指针的几种用法. const type *p 特性 防止使用p指针来修改p所指向的值,下面是最简单的错误例 ...

  8. c++中的void指针和const指针

    在c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针. 1.void指 ...

  9. const指针 常指针

    (2)常指针 必须进行初始化,且const指针的值不能修改. #include<iostream> using namespace std; int main(){const int nu ...

最新文章

  1. nvidia:未找到命令
  2. 广告小程序后端开发(4.导入地区数据,修改adminx,修改models,手动添加模拟数据)...
  3. Python编程基础:第三十九节 面向对象编程Object Oriented Programming
  4. ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库
  5. 跟我学交换机配置(一)
  6. asp.net mvc项目实例_降龙-第13章:MVC开发准备
  7. 爬取 wallhaven图片到本地壁纸库
  8. 堆积如山的Java面试简历,如何脱颖而出?写简历前你先要做这些
  9. 虚拟机中标麒麟操作系统gcc安装
  10. MPEG-4标准定义的音频压缩格式AAC详解
  11. lsb_slam Tracking线程 SE3Tracking 欧式变换矩阵跟踪参考帧 加权高斯牛顿优化算法WLM 最小二乘优化 归一化方差的光度误差函数 偏导数雅克比矩阵J 线性方程组LDLT求解
  12. vue3 - 网页大转盘抽奖功能,支持后端接口确定最终奖品,可自定义轮盘宽高、颜色、字号、按钮等等(超详细的示例代码及注释开箱即用,稍微改改就能应用到你的项目中)
  13. python删除excel某行的格式_Python+Xlwings 删除Excel的行和列
  14. 计算机组成原理课程设计_微程序控制的运算器设计
  15. Iphone 5.1.1越狱 Cydia点了后,系统图标消失
  16. apple 证书问题
  17. 英语作文 计算机的事实,英语作文:互联网是把双刃剑
  18. 使用 Windows 脚本文件 (.wsf)
  19. 新手小白如何选择入门吉他?注意这几点告别选择困难,附上初学者高性价比吉他品牌推荐!
  20. 中国这家企业实力太强,新能源汽车巨头特斯拉都必须选择它

热门文章

  1. Spring Boot文档阅读笔记-构建Restful风格的WebService
  2. Java笔记-AnnotationConfigApplicationContext在Spring中的例子
  3. Qt文档阅读笔记-QWebView官方解析与实例
  4. golang python扩展_Python 利用Go语言编写 CPython 扩展 goPy的简单示例
  5. python一切皆对象_Python中一切皆为对象
  6. 深度linux magento,linux下安装magento
  7. 计算机网络之传输层:7、TCP拥塞控制
  8. windbg调试HEAP
  9. 如何使用strace+pstack利器分析程序性能
  10. 207. 课程表/210. 课程表 II