const typedef define 小谈
const:
const修饰普通变量名,就是把变量声明为常量。并没有太多复杂的内容。(因为被const声明为常量之后就不可以更改,所以也有人直接说const锁定变量。这是在网上别的地方看到的。)
define:
一开始是因为被typedef弄混淆了,所以被弄混了。define就是一个替代的作用。
#define INT int INT a;//其实这里是等同int a;
在程序被编译器编译之前,于处理器,会用int去替换INT,仅仅是做简单的字符串替换罢了。
typedef:
这里才是今天要讲的重点,首先提一个问题,最后在解释:
问题:
#define fp int* typedef int* FP; const fp a; const FP b;
请问a跟b有什么区别?
问题先缓一下,现在说下const修饰的指针可以分为四类:
1.指向非常量数据的非常量指针:int *p;
2.指向常量数据的非常量指针:const int *p 也可以写成 int const *p;(可以通过修改指针指向其他的数据,但是被指针所指向的数据不可修改。)
3.指向非常量数据的常量指针:int* const p;(指针不可以修改,但是指针所指向的数据可以修改。)
4.指向常量数据的常量指针:const int* const p;(指针和指针所指向的数据皆无法修改。)
关于指针和typedef:
int *a,b; typedef int* INTP; INTP c,d;
在第一行中声明了a,b两个变量,其中a是整数型指针变量,而b仅仅是普通整形变量。
而INTP则声明了c,d都是整形指针变量。
经过上述的铺垫,现在回到上面留下的问题。
#define fp int* typedef int* FP; const fp a; const FP b;
const fp a;很明显就是一个简单的一个指向常量数据的非常量指针。即数据不可以改,但是指针可以改。
const FP b;这里就得注意一下了,在这里FP是个整体为int*,所以const修饰了b,而不是之前的*b,所以在此,指针(即b)为常量不可以修改,而数据(*b)是允许修改的。