用 typedef 声明新的类型名来代替已有的类型名。
|
声明INTEGER为整型:
typedef int INTEGER
声明结构类型:
typedef struct{
int month;
int day;
int year;}DATE; // DATE 就代表结构体变量
|
声明 NUM 为整型数组类型 :
typedef int NUM[100]; ==> int == NUM
声明 STRING 为字符指针类型:
typedef char *STRING; ==> char * == STRING
声明 POINTER 为指向函数的指针类型,该函数返回整型值 :
typedef int (*POINTER)(); ==> POINT 就是 int func_name () ; 类型的函数的地址
|
① 先按定义数组变量形式书写:int n[100];
② 将变量名n换成自己指定的类型名:
int NUM[100];
③ 在前面加上 typedef ,得到
typedef int NUM[100];
④ 用来定义变量:NUM n;//这里就直接用n去代替typedef 后面的NUM
void swap(int *a,int *b);
typedef void (*p)(int*,int*);
p z = swap; // swap函数的入口地址赋值给变量 z
z(a,b);
|
(1) 用 typedef 可以声明各种类型名,但不能用来定义变量。
(2) 用 typedef 只是对已经存在的类型增加一个类型名,而没有创造新的类型。
(3) 当不同源文件中用到同一类型数据时,常用 typedef 声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来。
(4) 使用 typedef 有利于程序的通用与移植。
|
(5) typedef与#define有相似之处,例如:
typedef int COUNT ; #define COUNT int 的作用都是用 COUNT 代表 int 。但事实上,它们二者是不同的。#define是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。
|
#include<stdio.h>
#include<stdlib.h>
typedef void(*func1)(); //定义一个函数指针类型(比如我们说的int类型一个概念)
void func()
{
printf("hello world\n");
}
int main()
{
void (*pfunc)(); //定义一个函数指针
//func1 = func; //func1是一个类型,类似不能 int = a;
func1 a = func; //声明类型变量
pfunc = func; //函数指针赋值
pfunc();
a();
system("pause");
}
|
//注意在C和C++里不同
在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
Stu==struct Student
于是在声明变量的时候就可:Stu stu1; (如果没有typedef就必须用 struct Student stu1; 来声明)
另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
typedef struct
{
int a;
}Stu;
但在c++里很简单,直接
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2;
======================================================================================
在c++中如果用typedef的话,又会造成区别:
struct Student
{
int a;
}stu1;//stu1是一个变量 ,相当于Student stu1;
typedef struct Student2
{
int a;
}stu2; //stu2==struct Student2
使用时可以直接访问 stu1.a
但是stu2则必须先 stu2 s2; s2.a=10;
======================================================================================