如何来理解c语言的这个陷阱
来源:互联网 发布:sql定义表变量 编辑:程序博客网 时间:2024/05/22 07:14
首先还请先看完前一篇“如何理解const char*, char const*, char*const等”
C语言的一个经典的陷阱:
下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?
1. typedef char * pStr;
2. char string[4] = "abc";
3. const char *p1 = string;
4. const pStr p2 = string;
5. p1++;
6. p2++;
答案是第6句,p2不能改变。可p1,p2不是一样吗,怎么就不能改变值了呢?
P1,p2不一样,typedef之后,pStr要当成一个整体,这时const修饰的是p2,相当于const (char *) p2,也就是上一篇里面的那个例子,什么?忘了!?回头再看下。
pStr被当成整体后,返回的是p2,const描述的是p2不能变。所以第6句错了。
到这里,我想到一个问题,按解释*P1是const,可没说*(p1+1)是const。它已不是前面说的内存2,而是内存2后面的那块内存。没说他是const啊,能被赋值吗?如*(p1+1)=”d”;
首先重申一下,这里的Const并不是说那块内存不能修改,而是通过这种方式不能修改那块内存,忘了的话,再去看看前一篇。描述有问题的,自行改正(^-^)。
事实证明*(p1+1)=”d”是不行的,为什么呢?官方的说法我不知道。奇淫技巧可以这么来解释:
首先你要对一个东西赋值,你总得先知道这是什么东西吧。好看看左边“*(p1+1)”,这是什么东西?
“(p1+1)”:整个相当于p,也就是内存1,他是由p1衍生出来的兄弟变量,新的变量copy了兄弟的特点,相当于(p1+1)也被const char *修饰过了一般,其用法跟p1一模一样,所以不能通过这种方式来修改那块内存。
写得不好,欢迎拍砖。
- 如何来理解c语言的这个陷阱
- 通过汇编来理解C语言的指针
- 用汇编语言角度来理解C语言的一些问题
- 这样子来理解C语言中指针的指针
- C语言运算符优先级理解记忆,语法“陷阱”
- 对c语言陷阱与缺陷中函数声明理解
- 给定一个日期,输出这个日期是该年的第几天。 C语言来做
- c语言中时间陷阱的实现
- 再看c语言的缺陷与陷阱
- C语言的陷阱与缺陷
- C语言中define的陷阱
- C语言中size_t的陷阱
- 一个C语言的浮点陷阱
- 一个C语言的浮点陷阱
- c语言的陷阱与缺陷小记
- c语言的一处陷阱:
- c语言的一处陷阱
- C语言里的一些陷阱
- 高姐短裙上阵比深蹲不怕露底 身材火辣模样赛空姐
- ffmpeg doxgen address
- c语言中static的作用
- 张亮穿泳裤出镜戏水耍酷 女粉丝见状大呼把持不住
- Missing separate debuginfos, use: debuginfo-install 解决方法如下----笛风读书笔记系列
- 如何来理解c语言的这个陷阱
- jQuery选择器大全
- pdb调试python脚本
- 通过注册表检测是否安装了VC++ 2008 SP1 redistributable。
- 【重新上本科】在实际问题中,内存赋值所拖累的效率(c++版本)
- 手机淘宝公布3.8包场细节 再度出击O2O
- 转:Maven常用命令
- jsoup Cookbook(中文版)
- Windows8 环境下的 jekyll 本地搭建