首页 > 代码库 > C和C++中的typedef的作用

C和C++中的typedef的作用

C和C++中的typedef的作用 

 

C和C++中的typedef的作用是定义一个类型的别名。其用法如下: 
  (1)typedef int Elemtype;基本用法 作用是定义int的别名Elemtype。 
  (2)typedef int arr[100]; 定义一个数组的别名arr,arr的类型是长度为100的整型数组,此后用arr定义的都是长度为100的int数组。
  (3)typedef struct node{ }Node; 定义一个结构体的别名,此后可以用Node代替struct node定义结构体变量。
  (4)typedef int (*pf)(int); 定义一个指针类型的别名pf,此后pf定义的都是指向函数的指针,且只能指向有一个int型参数的类型为int型函数。
  int fun(int x) 
  { 
  return x; 
  } 
  pf p; 
  p=fun; 
  (5)typedef int* (*pf)(int); 定义一个指针类型的别名pf,此后pf定义的都是指向函数的指针,且只能指向有一个int型参数的类型为int *的函数。
  int* fun(int x) 
  { 
  return &x; 
  } 
  pf p; 
  p=fun

 

 

 

 

从typedef别名的作用域看C++与C的安全性区别(转)

 

以前我知道可以用typedef来为类型起个别名,如“typedef long INDEX;”。给long这样的类型起别名主要目的不是简化程序的书写,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),如果直接声明为long型则失去了程序的可惟护性——每一个变量的声明都要改动;而声明为INDEX则使维护程序变得十分简单——只要改一下typedef语句即可。
  然而今天我才发现,这么长时间以来我一直是“只知其一不知其二”,今天才发现这个语句也可以在类里面定义,表示这个类型别名只在本类里面起作用。
class MyClass
{
public:
  typedef long INDEX;
...
};
  如果该语句放在public段中,则可以在类外部使用,比如:
MyClass::INDEX usercode;//声明一个变量
  而如果放在private段中,则只能在类内使用。
  以往我也经常用typedef,但是从来没有在类里面用过。今天算是学了一招了。C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。比如同样表示长度,可能有的类中只须char即可,有的类中要用int,而有的类可能连long都嫌小。那么,我一概起个别名叫“size”,不同的类中有不同的定义。于是,下面的声明语句就足以避免冲突而且易于理解:
MyClass::size 

MyClass::GetSize() const;
  进而,我试验了一下在函数体内部typedef,果然这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
  

 

 

C和C++中的typedef的作用