C语言从头学40——typedef命令

       typedef 这个命令在学习结构体时已经遇到过,它的作用是给定义的结构体起一个别名。当然,typedef命令不仅仅只是给结构体起别名,它还可以给其它类型起别名。也就是说,typedef就是专门给某些类型起别名的命令。
       格式为:typedef 类型名 别名;  下面介绍typedef的几种用途:
一、为类型起别名
       typedef unsigned char BYTE; //为无符号字符型起别名BYTE,在遇到需要声明无符号字符型时,即可用BYTE进行声明,如BYTE x='A';
       typedef int INT, myInt; // typedef可以一次为类型起两个或以上的别名
二、为指针起别名
       typedef int* ptrInt; //习惯上ptr代表指针,用ptrInt可替代int* 使用。
三、为数组起别名
       关于为数组起别名以及后面的为函数起别名,它们的格式不是像给类型起别名一样,“类型名在前、别名在后” 那么容易识别,而是把别名加在了中间。
       如 typedef int fiveArr[5]; 这里别名是fiveArr,代表的是int [5]。
       如 typedef char (*pStr)[20];别名是pStr,代表的是 char * [20]。char*代表字符串,后边再跟上[20]说明pStr代表的是字符串数组名,是个指针。加上括号我理解是编译器在使用这个别名时要优先解析pStr这个指针,所以把*pStr优先结合在一起;程序中使用这个别名时也是要与"*"优先结合的。
四、为函数起别名
       为函数起别名与为指针型字符串数组起别名类似。也是别名夹在中间。含义理解起来我觉得应该和字符串数组别名类似。
      格式:typedef 返回类型 (*pFunc)(参数类型表); //指针pFunc代表返回类型 (*)(参数类型列表)
      为函数起别名的意义在于把函数作为参数传递到另外一个函数中使用,否则单纯起一个别名没什么用。
五、起别名的优点
      1、提高代码的可读性;
      2、为结构体等起别名后使用起来简化代码量;
      3、方便以后为变量改类型,只要修改typedef命令行即可,不用挨个变量去改;
      4、通过为函数起别名,方便函数作为参数被其他函数调用。
六、举一个包括上面各种起别名情况的例子。具体如下:

#include<stdio.h>
//将int起别名为myInt
typedef int myInt; //myInt代表 int
//将char*起别名为myString
typedef  char* myString; //myString代表 char* 
//将指针型字符串数组起别名为pStr
typedef char(*pStr)[20]; // pStr代表char* [20]
typedef int (*pFunc)(int, int); //pFunc代表 int(*)(int,int)
//定义三个int()(inty,int)类型函数
myInt max(myInt x, myInt y) //取最大值函数(此处使用了int的别名myInt)
{
    return x > y ? x : y; //三目运算:a>b成立返回a,否则返回b
}
int min(int x, int y) //取最小值函数
{
    return x < y ? x : y;
}
int sum(int x, int y) //求和函数
{
    return x + y;
}


int main() 
{
    //使用char*别名myString声明变量字符串 s1
    myString s1 ="天津市紧邻首都北京!";
    printf("%s\n", s1); //运行结果:天津市紧邻首都北京!
    //声明一个char型二维数组str并赋值,
    //然后将数组名(指针)赋给指针型字符串数组的别名pStr
    char str[3][20] = {"C语言从头学,","很有意义,","贵在坚持!"}; 
    pStr p = str;
    for (int i = 0; i < 3; i++) {
        printf("str[%d]: %s\n", i, *(p + i)); //运行结果:str[0]: C语言从头学,
                                                        //str[1]: 很有意义,
                                                        //str[2]: 贵在坚持!
    }
    //用int()(inty,int)类型函数别名分别调用三个函数
    pFunc pfunc = max;
    printf("max: %d\n", (*pfunc)(10, 20));//运行结果:max: 20
    pfunc = min;
    printf("min: %d\n", (*pfunc)(10, 20));//运行结果:min: 10
    pfunc = sum;
    printf("sum: %d\n", (*pfunc)(10, 20));//运行结果:sum: 30
    getchar();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值