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

页面导航:首页 > 软件编程 > C 语言 > 一起talk C栗子吧(第九十 二回:C语言实例--浅谈

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

来源: 作者: 时间:2016-01-15 10:00 【

各位看官们,大家好,上一回中咱们说的是数组大小的例子,这一回咱们说的例子是:浅谈typedef。闲话休提,言归正转。让我们一起talk C栗子吧! 最近有看官问一些关于typedfe的问题,
各位看官们,大家好,上一回中咱们说的是数组大小的例子,这一回咱们说的例子是:浅谈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 

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 function ‘main’:
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 

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的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<