define与typedef的区别
2024-08-30 05:16:01
define:
发生在预处理阶段,也就是编译之前,仅仅文本替换,不做任何的类型检查
没有作用域的限制
typedef:
多用于简化复杂的类型声明,比如函数指针声明:typedef bool (*funcPoiinter) (int, double);
给已有类型定义一个别名(类似的 引用是给已有对象或者变量一个别名)
在编译阶段有效,具有类型检查的功能
定义域平台无关的数据类型。比如:size_t
有自己的作用域(函数内定义只能函数内部使用)
对指针的修饰作用不同:
typedef int * pint;
#define PINT int *
int i1 = , i2 = ;
const PINT p1 = &i1;//p可以更改,p指向的内容不可以更改,相当于const int *p 或 int const *p;
const pint p2 = &i2;//p不可以更改, p指向的内容可以更改,相当于int *const p;
pint s1, s2;
PINT s3, s4; void testPointer()
{
cout<<"p1:"<<p1<<" *p1:"<<*p1<<endl;
p1 = &i2;
//*p1 = 3; 报错
cout<<"p1:"<<p1<<" *p1:"<<*p1<<endl;
//p2 = &i1; 报错
*p2 = ;
cout<<"p2:"<<p2<<" *p2:"<<*p2<<endl;
}
ps:关于Const的修饰原则:从左至右,依次结合,const就近结合。在另一篇博文中。
最新文章
- Django分析之国际化处理
- 通过Spring Mail Api发送邮件
- C语言 稀疏矩阵 压缩 实现
- HTTP协议状态码
- 转载:为什么要对URI进行编码
- sql server split函数
- .net winForm 实现类似qq 弹出新闻
- Bootstrap3.0学习第八轮
- OMCS开发手册(04) -- 二次开发流程
- android点滴之HandlerThread的用法
- 【java设计模式】【行为模式Behavioral Pattern】策略模式Strategy Pattern
- jsp页面传中文到后台乱码怎么办?
- VMware中某个虚拟机卡死,单独关闭某个虚拟机的办法
- 【友情链接】各位dalao的博客
- 点击一个div ,把div里的某个参数的值,传到一个input里面
- 反恐24小时第一季/全集24 Live Another Day迅雷下载
- Android手势密码实现
- C# 高级编程9 第30章MEF C#可扩展编程之MEF第2章(抄录)
- String、StringBuffer、StringBuilder有什么区别
- PAT 甲级 1132 Cut Integer