C基础补漏--02关键字typedef

typedef
1、给已存在的数据类型取一个别名,可同时声明指针型的多个变量 &&2、减少错误*
char* pa,pb
=>pa 是指向字符char的指针
=>pb 1指字符变量
typedef char* PCHAR
PCHAR pa,pb
=>pa,pb 都是指向字符char的指针
3、直观简洁
C基础补漏--02关键字typedef
4、定义与平台无关的类型
C基础补漏--02关键字typedef

进阶 代码简化

经过typedef 后 变量变成是一种类型的代表符号 MYFUN==>类型 使用 MYFUN c = int(*a)(int ,int)
代码简化。为复杂的声明定义一个新的简单的别名。方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版。
来源:
1、https://blog.csdn.net/hai008007/article/details/80249957
2、https://blog.csdn.net/aiguohuaa/article/details/52169480
3、https://blog.csdn.net/as14569852/article/details/77770703
4、https://blog.csdn.net/qq78442761/article/details/81059400
5、https://blog.csdn.net/ftell/article/details/79792782
1-1给函数定义别名 &&给变量定义别名

C基础补漏--02关键字typedef
函数的函数名是一个指针,对应函数的代码在内存中的首地址
C基础补漏--02关键字typedef
**

typedef 概念

1)*int p
=》p变量 是一个指向int的指针
*typedef int p
=》p是一个类型 ,是指向int的指针 类型
eg: p a

2)typedef double MYDOUBLE
=》去掉 typedef MYDOUBLE 是一个变量 ,MYDOUBLE是double型变量
=》不去,MYDOUBLE 是一个double 类
MYDOUBLE d =》 d 是一个double 类

*3)typedef int Func(int)
=》去掉typedef Func 是一个函数标志符 ,参数是int ,返回是 int * 指向int的指针
=> 不去,则代表一种函数类型 (参数是int,返回是int)
Func *fptr //函数指针
Func f //声明意义不大

*4)typedef int (PFunc)(int)
=》去掉 typedef PFunc 是函数指针 返回的类型是 int 参数是int
=》不去则 是一个函数指针类型 返回的类型是int,参数是int
=> PFunc fptr; =>fptr 是一个函数指针 返回的类型是int,参数是int

5) typedef int A[5]
=》去掉 ,A是一个数组,有5个int元素
=》 A 是含有5个 int 元素的数组类型
A a = {3,4,5,7,8}
A:b ={3,4,5,6,7,8}; //warning excess elements int array initializer
*6)typedef int (A)[5]
=》 A 是一个指针,指向含有5个元素的数组
=》不去 是一个指针类型 ,指向指向含有5个元素的数组
=> int c[6]={3,4,5,7,8} A a =&c // waring ,initialization from Incompatible point type
7) typedef struct_Foo_t Foo_t
=>
=》
C基础补漏--02关键字typedef
C基础补漏--02关键字typedef
=> b[10] 是一个pFunx类型
》 是一个指向函数的指针类型 void (*b[10])(void (*b[10])()) ??
C基础补漏--02关键字typedef
=》fun 是函数指针,是指向函数的指针,函数有两个int参量,返回一个int值
fun=max=》 函数的函数名就是一个指针,指向代码中程序运行的首地址
fun(1,100) =》 max(1,100)
那为什么不直接用 max 而是要弄一个typedef?(图1答案)
》因为这样声明方便
C基础补漏--02关键字typedef
C基础补漏--02关键字typedef
C基础补漏--02关键字typedef