typedef和define的一些区别
来源:互联网 发布:乔任梁受什么网络暴力 编辑:程序博客网 时间:2024/06/05 19:04
#include <stdio.h>#define PINT int*typedef int* pint;/*以下实验说明了:(1)typedef int* pint; const pint p1=&i1 的效果是和下面的一样的 int* const p1; 这里的const锁住的是(p1),所以p1=&i2都是错的,因为这里内存地址p1已经被const锁住,而*p1=其他值是可以的(2)#define PINT int* const PINT p2=&i1 的效果是和下面的一样的 const int *p2; 这里const 锁住的是(*p2);所以*p2赋予其他值是错误的,因为这里值已经被锁住,而内存地址p2是可以赋予其他地址的。(3)pint a,b的效果和int* a;int* b;相同 PINT a,b的效果和int* a;int b相同(4)typedef int* pint; pint const p1=&i1; 的效果和(1)是一样的;(5)#define PINT int* PINT const p2=&i1; 的效果与(2)刚好相反,也与(1)相同。 总结:由此可见, (1)defined是宏替换,所以替换在编译之前,如const PINT p2=&i1,PINT const p2=&i1;进行了替换后在编译的话,编译的时候就会让编译器直接 看到const int *p2以及int* const p2; (2)而关键字typedef有种助记符的赶脚,所以在编译的时候反应比const慢,所以放在哪里都是先识别const先,变成int* const p1。 (3)嘻嘻,其他差异也可以看看说明的(3)*/void main(){ int i1=30; int i2=40; //const int *p=&i1; const int *p; p=&i1; p=&i2; //此处,p可以在任何时候重新赋值一个新的内存地址。 i2=80; //这里能用*p=80来代替吗?答案是不能 //*p=30; i1=35; //const pint p1=&i1; pint const p1=&i1; //const PINT p2=&i1; //PINT const p2=&i1; //int* const p3=&i1; //i1=40; //p2=&i2; //*p1=50; //*p2=89; //p1=&i2; //*p3= //i2=90;// printf("%d",*p2); //输出80}
1 0
- typedef和define的一些区别
- typedef和define的一些区别
- typedef和define的区别
- typedef 和 define的区别
- define和typedef的区别
- #define和typedef的区别
- Typedef和define的区别
- #define和typedef的区别
- Typedef和define的区别
- #define和typedef的区别
- Typedef和#define的区别
- typedef 和 define的区别
- typedef和#define的区别
- define和typedef的区别
- typedef和#define的区别
- typedef和define的区别
- typedef和#define的区别
- typedef和#define的区别
- Android数据库ORMlite框架翻译系列(第二章:part 2)
- 如何搭建.NET Entity Framework分布式应用系统框架
- 2013斯坦福大学公开课 iOS7开发课程 PPT
- windows 远程 ubuntu
- Android数据库ORMlite框架翻译系列(第二章:part 3)
- typedef和define的一些区别
- linux 文件I/O 入门
- hdoj 1426 Sudoku Killer 【DFS经典题目】
- 迈克尔杰克逊
- Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- awk关系操作符
- opencv 在 ubuntu14.04 中的配置和测试
- leetcode--Bitwise AND of Numbers Range
- POJ 1183 反正切函数的应用(数论)