Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1382
  • 博文数量: 1
  • 博客积分: 75
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 19:01
文章分类

全部博文(1)

文章存档

2011年(1)

我的朋友
最近访客

分类:

2011-03-23 15:37:13

    typedef最常用也最好理解的是当作类型的别名,例如:
    tepedef unsigned int UINT;
    UNIT i = 10;
这样很好理解,number是int的一个别名,及代表int的一个类型说明符。所以第二语句很自然的就可理解为将i定义为一个unsigned int型变量,并且赋值为10。但一开始我们使用typedef时,很容易将它与define相混淆,认为它的功能差不多也是文本替换而已,但是如果这样理解的话,下面的一个语句就不好解释了:
    typedef string *name;
    name xiaohong;
如果按上述理解的话使用*name来代替string,使用时也应该是*name xiaohong;才对。但是这样理解是不对的,上面的语句等同于:
    string *xiaohong;
是将xiaohong定义一个指向字符串的指针。
 
    所以typedef远远不止这么简单,它的功能也不能用一个文本替换来概括。下面我们来看看它的一些更复杂的功能:
    typedef string *name;
    const name xiaohong;
按现在的理解,xiaohong应该是个什么类型的变量呢?也许你会认为这个相当于:
    const string* xiaohong;
其实不是这样的。正确的应该是:
    string *const xiaohong;
xiaohong是一个指向string类型的const指针。
 
    typedef与多维数组指针定义:
    int a[4][3];
    int (*b)[3]=a[0];
上面语句将b声明为一个指向含有3个整型元素的数组的指针,具体点说就是b的类型是int[3]*而不是int*。如果我们用typedef来简化定义,我们可以这样写:
    int a[4][3];
    typedef int array[3];
    array *b;
    b=a[0];
上面的语句也是将b声明为int[3]型指针。对于这个语句,我是这样理解的typedef int array[3];相当于声明一个链接,它将用标识符array声明的变量名b链接到定义标识符array的typedef语句里去,如果我们用公式array=*b代入typedef的话就可以得到:
    int (*b)[3];
其实我发现这样代入能够使我们很容易的去理解一些比较复杂的typedef语句,操作简单明了,一看便懂。例如下面的一个函数声明:
    int (*func)(const int&,const string&);
我们可以使用typedef来简化上面的函数声明:
    typedef int (*func_easy)(const int&,const string&);
    func_easy func;
这语句的功能等同于int (*func)(const int&,const string&);对于这个函数声明同样可以用链接的方式进行理解。
阅读(221) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~