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)是允许修改的。

posted on 2012-06-05 13:39  ChanSea  阅读(178)  评论(0编辑  收藏  举报