黑马程序员——C语言基础——typedef的用法

本文详细介绍了C语言中typedef关键字的定义及其应用场景,包括为基本数据类型、结构体、指针和枚举类型定义新名称的方法,并对比了typedef与预处理指令#define的不同。
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.typedef的定义和作用

typedef是C语言的关键字,作用是为一种数据类型定义一个新名字。数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中使用typedef目的一般有两个:

1,给变量一个易记且意义明确的新名字,

2,简化一些比较复杂的类型声明。

2.typedef的使用

1>定义基本数据类型

例如:typedef int MyInt;

另外,可以在别名的基础上再起一个别名。如:typedef MyInt MyInt2;

2>定义结构体类型

结构体的定义有三种方式:

第一种方式: 先定义结构体再定义typedef

struct Person {  
    int age;  
};  
typedef struct Person Person; 

第二种方式:定义结构体的同时定义typedef

typedef struct Person{ 
    int age;  
}Person;  
第三种方式:
typedef struct { 
    int age;  
}Person; <span style="color: black; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px; font-size: 9px; background-color: inherit;"> </span>

3>定义指针类型

定义普通类型的指针

<pre name="code" class="objc">typedef char *String;

 
 

定义结构体的指针两种方式

第一种方式:

struct Person {  // 第一种  
    int age;  
};  
typedef struct Person *PersonPoint;

第二种方式:

typedef struct Person {  // 第二种  
    int age;  
}* PersonPoint;

4>定义枚举类型

定义枚举类型也有两种方式:

第一种方式是定义已经定义的枚举类型

enum Season {  
spring ,  
summer,   
autumn,  
winter  
};  
typedef enum Season Season; 
第一种方式是定义枚举类型的同时定义别名
typedef enum{   
spring,  
summer,   
autumn,  
winter  
}Season; <span style="color: black; line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px; background-color: inherit;"> </span>

5>定义指向函数的指针

// 这里与其他类型不同MyMethod即为别名 
typedef int (*MyMethod)(int ,int); 
int minus(int a,int b)  
{  
    return a + b;  
}  
int sum(int a, int b)  
{  
    return a +b;  
}  
// 使用定义的类型指向函数  
MyMethod MySum = sum;  
MyMethod  MyMinus = minus; 
 // 注意这里MyMethod不用加* <span style="color: black; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px; font-size: 9px; background-color: inherit;">  </span>

3.typedef与#define的区别

#define是预处理指令,是在程序运行之前替换代码,只替换代码而不进行运算等操作

typedef是定义一个新名(别名)

从下面的例子中可以看出二者的差别:

#define String1 char *

typedef char *String2;

String1 s1,s2;  // 此处等价于char *s1;chars2;

String2 s3,s4;  // 此处等价于char *s3;char*s4




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值