一起talk C栗子吧(第九十 二回:C语言实例--浅谈typedef)


各位看官们,大家好,上一回中咱们说的是数组大小的例子,这一回咱们说的例子是:浅谈typedef。闲话休提,言归正转。让我们一起talk C栗子吧!

最近有看官问一些关于typedfe的问题,我在这里专门做一个说明,希望对大家有帮助。

typedef是C语言的一个关键字,用来重新定义类型通俗点说叫起别名或者起绰号也可以

typedef通常有两个功能:

  • 为了程序简洁易懂(可读性好);
  • 为了避免程序出错;

简洁易懂

关于简洁易懂,我们举一个例子:

typedef struct person
{
    int age;
    char *name;
    char flag;
}Person;

在例子中定义了一个新的类型:Person.它和struct person的效果相同,在下面的代码中

Person p1;              //定义一个结构体变量
struct person p1;      //定义一个结构体变量

在上面的例子中Person p1; 等价于 struct person p1.但是前面的写法更加简洁一些。

还记得是我们在前面的章回中介绍过后的函数;signal吗?下面是signal函数的原型

void (*signal(int signo, void (*func) (int))) (int)

我们可以定义一个新类型:

typedef void func (int);

它表示一个函数,该函数拥有一个int类型的参数,并且返回类型为void。定义好该类型后,函数signal的函数原型可以这样写:

func * signal (int signo, func *pFun);  //使用typedef定义新类型后的signal函数

现在的signal函数是不是简洁很多呢。

避免出错

关于避免程序出错,我们也举一个例子:

#include <stdio.h>

int main()
{
    int *p1,p2;

    int a,b;
    a = 3; 
    b = 5;

    p1 = &a;
    p2 = &b;

    printf("a = %d \n",*p1);
    printf("b = %d \n",*p2);

    return 0;
}

编译上面的程序会有编译警告和错误出现:

In functionmain’:
typFile.c:12:5:
 warning: assignment makes integer from pointer without a cast [enabled by default]
  p2 = &b;                  //发出警告
typFile.c:15:21: error: invalid type argument of unary ‘*’ (have ‘int’)
  printf("b = %d \n",*p2);  //编译错误

其实我们是想定义两个int类型的指针,结果定义了一个指针,一个变量,为了避免这种错误,我们可以在程序中使用typedef来定义一个指针类型。具体如下:

#include <stdio.h>

typedef int * pInt;            //定义一个新的指针类型

int main()
{
    pInt p1,p2;                //使用新类型定义两个指针

    int a,b;
    a = 3; 
    b = 5;

    p1 = &a;
    p2 = &b;

    printf("a = %d \n",*p1);
    printf("b = %d \n",*p2);

    return 0;
}

编译该程序,刚才的警告和错误没有了,我们运行编译后的程序可以得到以下结果:

a = 3 
b = 5           //程序运行正确

各位看官,关于浅谈typedef的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值