c语言中typedef和指针的联系

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 &num;
}
int *FUNC(int num)
{
	printf("%d\t",num);
	return &num;
}
int *FUNB(int num)
{
	printf("%d\t",num);
	return &num;
}

实现:

	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

6.typedef与指针函数带有指针函数的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值