typedef 小述

先看一个例子

void print(int n)
{
    printf("%d",n);
}
int main()
{
    typedef int I;
 //为int类型声明一个新名字I
    I a = 5;//相当于int a = 5;

    /* 如果上面的typedef去掉,int I就是一个普通的变量声明,声明一个int
     * 型的变量I;下面同理:
     * void (*fun) (int)只是声明一个函数指针fun;
     * 加上typedef,相当于为指向void f(int)这种形式的函数的函数指针
     * 声明了一个新名字:fun
     * fun s;也就相当于void(*s) (int); 
     */
    typedef void(*fun) (int); 
    fun s;
    s = print;
    s(5);

     /* 看typedef的含义,要不妨可以尝试先去掉typedef看看
      * int x[10];声明一个数组x,数组有十个int型元素
      * 加上typedef,可以看作把x上升为一种类型,x i相当于int i[10];
      */
    typedef int x[10];
    return 0;
}

上述代码输出:5

define和typedef的区别

首先,可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这样做。如下所示:

define peach int

unsigned peach i; //这里没有问题,编译通过

typedef int banana;
unsigned banana i; //错误,不能这样做

其次,在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define 定义的类型无法保证.如下所示:

define peach int*

peach apple,banana;

经过宏扩展,第二行变为:
int* apple,banana;
这使得apple和banana成为不同的类型,apple是一个指向int的指针,而banana则是一个int。
相反,在下面的代码中:

typedef char* peach
peach apple,banana;

apple和banana的类型依然相同。虽然前面的类型名变了,但他们的类型相同,都是指向char的指针。

类型别名中要注意的是 typedef int p;p为int的别名。而const p不是const int , p的基本数据类型是指针,所以const p是表示指针本身是const,即int const 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值