首页 > 代码库 > typedef 与指针、多维数组

typedef 与指针、多维数组

1.在typedef中使用指针往往会带来意外的结果。如下:

typedef string *pstring;
const pstring cstr;

绝大数人刚开始都会认为cstr是一种指针,它指向const对象,即const pstring cstr 等价于const string *cstr,其实,这是不对的,错误的原因在于单纯地将typedef当做文本扩展了。

首先,我们要认识到pstring它是一个类型,表示的是指向string的指针。声明const pstring时,const修饰的是pstring这个类型本身(修饰的是指针),两者结合起来,即表示指向string的const指针这种类型。最后用const pstring类型来修饰标识符cstr,表明cstr是一个指向string的const指针。原定义可写为:string *const cstr。

其实,我们不需要每次都分析的这么痛苦,因为,在C++中const限定符既可以放在类型前,也可以放在类型后:

string const s1;    // s1 and s2 have same type,
const string s2;    // they‘re both strings that are const 

所以,下次遇到这样不确定的类型判断时,就const放在诸如pstring类型的后面即可,转换为pstring const cst;

 

2.用typedef简化指向多维数组的指针

typedef类型定义可使指向多维数组元素的指针更容易读、写和理解。以下程序用typedef为数组ia的元素类型定义新的类型名:

int ia[3][4];
typedef int int_array[4];
int_arry *ip = ia;