1.typedef简单的使用
typedef + 要替换的 + 替换后的名字
下面的:
要替换的:int
替换后的名字:typedefint
typedef int typedefint;
则用typedefint 类型定义的数与int型定义完全相同
//此时的a和b的类型是相同的
int a;
typedef b;
2.typedef定义结构体
与上一个类似
typedef + 具体的结构体 + 替换的名称
typedef struct BNode
{
typedefint data; //这里的typedefint就是上一个定义的,也就是int
struct BNode * next;
}BiNode;
这里定义的 struct BNode 就是BiNode
也就是说两个相等
struct BNode BT;
BiNode BiT;
//这里的BT和BiT是同一数据类型
3.typedef与简单指针
*typedef + 类型 + 替换名
typedef int *typedefint;
我们来讨论c语言中指针和typedef
int a=10;
int *b=&a;
typedefint c=b;
printf("a: %d\n",a);
printf("&a: %p\n",&a);
printf("b: %p\n",b);
printf("c: %p\n",c);
printf("*c: %d\n",*c);
输出的是:
a: 10
&a: 000000000062FE3C
b: 000000000062FE3C
c: 000000000062FE3C
*c: 10
我们知道关系就是:
typedefint 就是 int *
则b与c都是指向a=10的地址的指针
而*b和*c则是指向地址的内容
4.typedef与指针数组
个人观念:int *
其实就是一位数组的类型 比如:int *n 再分配空间
就是 int n[9]分配的空间为9
如下:
这里的[3]是指的是大小为3的数组
而(*PRT_TO_ARRAY)
则是指针,指向array[3]的首地址,有一点二维数组的意思
定义的prt_to_array
就是该指针,而(*prt_to_array)[0]就是array[0]
typedef int (*PRT_TO_ARRAY)[3];
int array[3]={1,2,3};
PRT_TO_ARRAY prt_to_array=&array;
for(int i=0;i<3;i++)
{
printf("%d\n",(*prt_to_array)[i]);
}
输出为:1,2,3
与数组和指针关系如下:
int a[3]={45,56,67};
int *p=a; //其实*p就是a[0]
for(;*p!=NULL;p++) //*p就是指向a的首元素,p++就是让p移动
{
printf("%d\n",*p);
}
输出:45,56,67
要注意的是
for(int i=0;i<3;i++)
{
printf("%d\n",(*prt_to_array)[i]);
}
两个有区别:
上面的指针prt_to_array指向的是二维数组的一行
下面的指针p指向的是一维数组的首地址
for(;*p!=NULL;p++)
{
printf("%d\n",*p);
}
5.typedef与数组指针函数
如下:
见到了 名字+(数据类型) 的形式则为函数的定义
typedef int *(*PTR_TO_FUN)(int); //这里的(int)是传入的形参
定义函数:
int *FUNA(int num)
{
printf("%d\t",num);
return #
}
int *FUNC(int num)
{
printf("%d\t",num);
return #
}
int *FUNB(int num)
{
printf("%d\t",num);
return #
}
实现:
PTR_TO_FUN array[3]={&FUNA,&FUNB,&FUNC};
for(int i=0;i<3;i++)
{
printf("array is address: %p\n",(*array[i])(i));
}
printf("\n");
输出:
0 array is address: 000000000062FE10
1 array is address: 000000000062FE10
2 array is address: 000000000062FE10
对于一个函数来说:
函数是int *
型的函数所以要返回的是int型数据的地址
而fun 则是指向函数返回值地址的指针
对于*fun(i)
是值,fun(i)
是地址
int i=3;
PTR_TO_FUN fun=&FUNA;
printf("%d",*fun(i));
printf("%p",fun(i));
输出:3 3