const用来限定一个变量的值不能被改变,初学者在使用const修饰指针变量时常容易犯错,看两个例子
例子A:
char * const a = 'A';
a = 'B';
例子B:
const char * a = 'A';
a = 'B';
结论:例子A是正确的,B是错误的,说明const在*左边修饰指针变量锁指向的值,在右边修饰指针变量本身
typedef用来定义一个类型的别名,#define也是用来替换,他们都不创造任何新的东西 具体有什么不同看下面两个例子
程序A:
typedef char * pStr;
char string[4] = "abc";
const pStr p = string;
p++;
程序B:
#define pStr char*
char string[4] = "abc";
const pStr p = string;
p++;
第一个程序会出错,而第二个不会
总结:首先,#define 是预编译指令,在预编译阶段产生作用;typedef在编译阶段产生作用
其次,#define 只做替换,不进行类型检查;typedef会做类型检查