typedef与#define和const的用法区分
来源:互联网 发布:路由器信号增强软件 编辑:程序博客网 时间:2024/05/20 15:12
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
define为宏定义,它可以用来定义一个常量,常量的值为字符串或者数字,不可再更改。
define可以用作定义无参或者有参运算式,定义时运算式要加括号,否则会出错误。
define只是简单的文本替换
typedef是给一个类型重命名
当我们定义指针的时候,typedef要比define有优势
define工作在预编译时,进行简单的文本替换
define定义时,如果涉及到运算式,需要用括号括起
for example:
define f(x) ((x)*(x))
typedef工作在编译时,将数据类型重名命
typedef可以命名复杂的数据类型,我们常见的结构体类型,就常常和typedef结合起来使用
for example:
typedef struct tagMyStruct{int iNum;long lLength; }MyStruct;
实际上执行两个操作,一个是定义了结构体tagMyStruct,注意这是一个临时的名字
struct tagMyStruct{int iNum;long lLength;};
而typedef为这个结构体起了一个新名字
typedef struct tagMyStruct MyStruct;
如果我们要定义指针
typedef char* pStr1;#define pStr2 char* pStr1 s1,s2;pStr2 s3,s4;
在这里,s1,s2,s3都被定义为char*,s4为char类型,正确的写法应该是
pStr2 s3,*s4;
还有一例:
typedef char *pStr;char string[4]="abc";const char *p1=string;const pStr p2=string;p1++;p2++;
如果我们执行会报错
$ gcc typedef_pointer.c -o typedef_pointer
typedef_pointer.c: In function ‘main’:
typedef_pointer.c:11:5: error: increment of read-only variable ‘p2’
p2++;
^
这是因为p2是一个只读常量,它是不可变的。const用于限定一个变量为只读变量(和常量的概念不同),const char* p1限定了p1指针为只读,*p1不可改变,但是p1是可以变的,故p1++不报错。
const pStr p2并不等于const char * p2,和pStr const p2作用相同,它限定了p2是只读变量,只不过类型是我们自己定义的pStr,故p2++报错。
const type M,这句话表明M被限定为只读变量,不可当常量使用,这是ANSI C的标准,与C++标准有不同之处。
- typedef与#define和const的用法区分
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- (WPF) 窗口间传参数
- 纪念参加第八届 蓝桥杯java 软件开发(C组)
- 朴素贝叶斯
- 风险预警·11g容易被忽略的导入性能问题
- Java练习1
- typedef与#define和const的用法区分
- vs2008里批量删除历史记录与.ncb、.obj等文件
- Android中Parcelable接口用法
- 前端页面自动接管流程探索
- solr查询参数简单说明
- Linux设置开机启动
- C#调用C++Dll
- 可持久化treap 模板
- 背包之01背包、完全背包、多重背包详解