int* const p3 = NULL; //const后面是数据p3 。也就是指针p3本身是const .
const int* const p4 = &a; // 通过p4不能改变a 的值,同时p4本身也是 const int const* const p5 = &a; //效果同上
return 0;
} typedef int* pint_t; //将 int* 类型 包装为 pint_t,则pint_t 现在是一个完整的原子类型
int main(){
int a = 1; const pint_t p1 = &a; //同样,const跳过类型pint_t,修饰p1,指针p1本身是const pint_t const p2 = &a; //const 直接修饰p,同上
return 0;
}深拷贝和浅拷贝
如果2个程序单元(例如2个函数)是通过拷贝他们所共享的数据的指针来工作的,这就是浅拷贝,因为真正要访问的数据并没有被拷贝 。
如果被访问的数据被拷贝了,在每个单元中都有自己的一份,对目标数据的操作相互不受影响,则叫做深拷贝 。

文章插图
附加知识
指针和引用这个2个名词的区别 。他们本质上来说是同样的东西 。
指针常用在C语言中,而引用,则用于诸如JAVA,C#等 在语言层面封装了对指针的直接操作的编程语言中 。
大端模式和小端模式
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端 。个人PC常用,Intel X86处理器是小端模式 。
2) B i g-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 。
采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理 。
有些机器同时支持大端和小端模式,通过配置来设定实际的端模式 。
假如 short类型占用2个字节,且存储的地址为0x30 。
short a = 1;
如下图:

文章插图
//测试机器使用的是否为小端模式 。是,则返回true,否则返回false//这个方法判别的依据就是:C语言中一个对象的地址就是这个对象占用的字节中,地址值最小的那个字节的地址 。bool isSmallIndain(){ unsigned int val = 'A'; unsigned char* p = (unsigned char*)&val; //C/C++:对于多字节数据,取地址是取的数据对象的第一个字节的地址,也就是数据的低地址 return *p == 'A';}
相关推荐

文章插图
《C语言深度解剖(第3版)》由作者结合自身多年嵌入式C语言开发经验和平时讲解C语言的心得体会整理而成,其中有很多作者独特的见解或看法 。由于并不是从头到尾讲解C语言的基础知识,所以该书并不适用于C语言零基础的读者,其内容要比一般的C语言图书深得多、细致得多,其中有很多问题是各大公司的面试或笔试题 。第3版中新增加了部分C语言知识点的内容 。
《C语言深度解剖(第3版)》适合广大计算机系学生、初级程序员参考学习,也适合计算机系教师、中高级程序员参考使用 。
作者简介
陈正冲,湖南沅江人,毕业于中国科学技术大学 。具有丰富的嵌入式软件开发与管理经验,对于软件工程方法论和研发管理有深刻理解 。每年都多次举行软件工程技术和研发管理方面培训,讲课深入、透彻、幽默,深受各方好评 。目前主要从事研发管理工作 。
推荐阅读
- 超炫酷技巧!C语言代码优化的技巧
- C语言访问字符串数组元素的方式
- C语言关键字const和指针结合的使用
- 头昏脑胀怎么治疗?
- C语言厉害在哪?
- C语言、嵌入式重点知识:回调函数
- C语言指针经典知识汇总
- 移动应用开发的六大编程语言
- 用C语言编写CPU使用率限制程序
- 跨平台的C语言网络框架库acl
