c++中typedef和#define的区别

c++中typedef和#define的区别

  1. 宏主要用于定义常量书写复杂的内容;typedef主要用于定义类型别名
  2. 宏替换发生在编译阶段之前(预处理阶段),属于文本插入替换;typedef是编译的一部分
  3. 不检查类型typedef会检查数据类型
  4. 宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束。
  5. 注意对指针的操作,typedef char * p_char和#define p_char char *区别巨大。

第五点示例代码如下

#include<iostream>
#include<vector>
using namespace std;
#define int_ptr1 int*//预处理指令,结尾不用加封号
typedef int* int_ptr2;//语句,必须加封号。

int main(){
	
	

	int a = 1000;
	int_ptr1 p1, p2;//声明一个指针变量p1和一个整型变量p2
	p1 = &a;//p1是int*类型
	p2 = a;//p2是int类型
	cout << *p1 << endl;//1000
	cout << p2 << endl;//1000
	
	cout << "----------------------------------------------"<< endl;

	int b = 2000;
	int_ptr2 p3, p4;//声明两个指针变量p3、p4
	p3 = &b; //p3是int*类型
	p4 = &b; //p4是int*类型
	cout << *p3 << endl;//2000
	cout << *p4 << endl;//2000
	cout << "----------------------------------------------" << endl;

	int c = 3000;
	const int_ptr1 p5 = &a;
	//const INTPTR1 p5是一个常量指针,即不可以通过p5去修改p5指向的内容,但是p5可以指向其他内容。
	//*p5 = 250;//VS下报错:表达式必须是可修改的左值,证明是常量指针


	int_ptr1 const p6 = &a;
	//const INTPTR2 p6是一个指针常量,不可使p6再指向其他内容。
	//因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。
	//p6 = &c;
	//VS下报错:表达式必须是可修改的左值,证明是指针常量




	const int_ptr2 p7 = &b;
	//const INTPTR2 p7是一个指针常量,不可使p7再指向其他内容。
	//因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。
	//p7 = &a;//VS下报错:表达式必须是可修改的左值,证明是指针常量
	cout << *p7 << endl;//2000

	int_ptr2 const p8 = &c;
	//const INTPTR2 p8是一个指针常量,不可使p8再指向其他内容。
	//因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。
	//p8 = &b;//VS下报错:表达式必须是可修改的左值,证明是指针常量
	cout << *p8 << endl;//3000


	system("pause");
	return 0;
}

VS2013下运行结果

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodePlayer大旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值