const,typedef与define
2016-02-23 19:52
253 查看
const 指针:
int const *p;
// p指向一个int类型,可以改变p得指向位置,但不能改变p指向位置的值。
int * const p;
// p指向一个int类型,不能改变p指向的位置,但可以改变p指向位置的值。
通过判断const在*得位置来判断p是常量指针还是指向位置的值不能改变。
前者const修饰的是指针指向的位置*p
后者const修饰的是指针p
我们知道,define和typedef两者有明显区别。
define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错
typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition
虽然知道二者的区别,但是实际使用过程中还是容易犯错
比如
typedef int INT;
#define int INT;
都是INT表示int
但是当修饰指针的时候
1.#define TYPE* pint //pint也为指向一个TYPE的指针
2.typedef TYPE* pint; // pint 为指向一个TYPE 的指针
pint都是表示 TYPE*的意思
接下来:
1. const pint p;
替换过后:const TYPE* p;
声明了一个指针p,该指针指向TYPE类型,const修饰的是*p
2.const pint p;
声明了一个指针p,该指针指向TYPE类型,const修饰的是p
int const *p;
// p指向一个int类型,可以改变p得指向位置,但不能改变p指向位置的值。
int * const p;
// p指向一个int类型,不能改变p指向的位置,但可以改变p指向位置的值。
通过判断const在*得位置来判断p是常量指针还是指向位置的值不能改变。
前者const修饰的是指针指向的位置*p
后者const修饰的是指针p
我们知道,define和typedef两者有明显区别。
define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错
typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition
虽然知道二者的区别,但是实际使用过程中还是容易犯错
比如
typedef int INT;
#define int INT;
都是INT表示int
但是当修饰指针的时候
1.#define TYPE* pint //pint也为指向一个TYPE的指针
2.typedef TYPE* pint; // pint 为指向一个TYPE 的指针
pint都是表示 TYPE*的意思
接下来:
1. const pint p;
替换过后:const TYPE* p;
声明了一个指针p,该指针指向TYPE类型,const修饰的是*p
2.const pint p;
声明了一个指针p,该指针指向TYPE类型,const修饰的是p
typedef int* pint; typedef const int* cpint; int main() { int a = 10; int b = 5; pint p1 = &a; const pint p2 = &a; cpint p3 = &a; const cpint p4 = &a; *p1 = 6; //正确 p1 --int* p1 *p2 = 6; //正确 p2 --int * const p2 是一个常指针,指向a,可以改变a的值 *p3 = 6; //错误 p3 --int const *p3 *p4 = 6; <span style="white-space:pre"> </span>//错误 p4 --const int* const p4 既不能改变p4指向的位置,也不能改变指向位置的值 p1 = &b; //正确 p2 = &b; //错误 p3 = &b; //正确 p4 = &b; //错误 return 0; }
相关文章推荐
- android shape绘制组件边框
- 程序员如何留住健康?
- oracle执行update语句卡住不动
- java接口编程题
- 内部使用final参数的原因
- git服务器修改ssh端口后配置方法
- Linux 系统中如何查看日志(常用命令)
- 20160223 - Windows 10 的文件资源管理器下出现重复文件夹的解决办法
- Spring-02-详细配置
- redis安装
- android内部存储读写文件详解
- 如何保证测试的覆盖率
- 【template】练习
- upper_bound和lower_bound用法
- 2016寒假训练——搜索
- scrapy 单脚本执行 爬去jandan无聊图的gif文件
- Codeforces 623B:Array GCD
- Apache shiro 笔记整理之编程式授权
- The world beyond batch: Streaming 101
- 分别利用(代码,Xib,SB)创建空的App工程