ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

typedef使用

2020-01-07 11:01:40  阅读:345  来源: 互联网

标签:typedef 函数 int func 使用 类型 mins


typedef是干嘛的

typedef是用来定义新类型的

这里的新有两个意思:

1、旧类型改成新的名字

比如:typedef INT int; 是说程序中应该使用int的地方统一使用INT了.这么做是不是有些脱裤子放屁了???其实不是.这种做法在移植上很常见.有些系统上的int长度不一样.比如有的系统上int是16位长度的,使用int_16表示.这个时候只需要写成typedef INT int_16; 那么程序中INT的类型都会换成int_16这个符合新系统的类型了. 这里有些时候也可以使用#define来替换.
举个例子:

int *p;
上面这句话大家都知道是定义了一个int*类型的指针变量p 
现在问你一个问题,p是个变量,那么p的类型是什么?
你一看,这不是废话么.p的类型当然是int *类型的了.说成人话就是,p的类型是`整型的指针类型`.
(这句话里有个整型,这个型是和整在一起的,整型是一个词,表示这个位置应该是个数字,所以可以这么说,p的类型是数字的指针类型,p的内容是个地址,这个地址上只能存数字,还是个整数数字).
现在明白了p的类型了,我们再来看看下面这句话.

typedef int *p;
这句话是使用了typedef来将int *类型使用了一个标识符p来进行代替.这个式子里就一个p不是关键字.
经过这句话后,就是给int *起了一个别名叫p
所以以后声明新的整型指针变量的时候可以直接使用p来进行声明了.
比如: p a; 这句话就和 int * a;是一样的.
我们怎么理解p是int *的类型?
首先看int *p;
这个p是int *类型的,然后再前面加上了typedef后,p就表示这个类型了.这个弯要转过来哦.

2、定义一个新的类型

这个就是大家很疑惑的地方了。什么叫新类型?不是我们常见的基本类型。比如函数指针类型的变量,指针数组类型的变量.

直接上例子
int add(int a, int b);首先定义了一个求和函数.

int (*func)(int, int);这句话是声明了一个函数指针(不明白的去看一下我的其他博文).
这句话写出来之后,就是和 int x;没有区别,就是声明了一个变量.
int (*func)(int, int);声明了一个指针变量叫func,由于它是一个函数指针,所以它应该有所指向,并且应该指向一个函数.它指向了一个返回值是int,形参是(int,int)的这样的函数(也就是指向了add那样的函数).
既然是这样的函数(这样的函数是个什么样的函数?返回值是int,形参是(int,int)的函数),我们是不是可以给这样的函数起个名字啊?
当然可以啊.
那我们是不是也可以把这样的函数叫做这个类型的函数啊?
当然可以啊.

好,那我们来起名字.
typedef int (*this_type)(int, int);
这样就给这样的函数起了个名字叫`this_type`.
以后我们就可以使用this_type来声明一个函数指针了.
this_type mins_func;//声明了一个叫做mins_func的函数指针,mins_func指向 `返回值是int,形参是(int,int)的函数`


举个完整例子(这个例子,我自己实际运行过的,输出ok)
#include <stdio.h>
//我们定义一个求差的函数
int mins(int a, int b);//这句是声明
//下面这个是具体实现
int mins(int a, int b){
    return a-b;
}

typedef int (*this_type)(int, int);

//现在我们写一个main函数
int main(){
    int cha = 0;
    this_type mins_func; //声明函数指针
    mins_func = mins;    //给函数指针赋值
    cha = mins_func(3, 4);    //调用函数指针指向的函数
    printf("3 - 4 = %d\n", cha);
    return 0;
}

3、总结

该怎么使用typedef来定义新的类型???

首先写出需要定义的变量(某个标识符比如p,比如func),一般都是如何定义的,比如函数指针,数组指针
然后在前面加上typedef
最后你写的那个p,那个func就是新类型的名字了.
就是那个typedef的功能,它就是把之前的声明出来的变量名转换成了新的类型名.

标签:typedef,函数,int,func,使用,类型,mins
来源: https://www.cnblogs.com/dhu121/p/12160281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有