当前位置:   article > 正文

C语言的声明——typedef 分析_为什么要用typedef定义结构体指针

为什么要用typedef定义结构体指针

作用

为一种类型引入新名字,但是不分配空间,也不创建一个变量

使用场景

1.常用场景

typedef一般用于简洁地表示指向其他东西的指针,常用在数组、结构、指针以及函数的组合类型。
示例如下:

#include <stdio.h>

/*
本测试用例用于说明typedef的优势
功能:选择加减操作符,执行对面操作
说明:首先根据操作符选择对应的函数指针,通过typedef定义的函数指针,带上参数,得到二目运算结果
*/

typedef int (*PFun)(int, int);	//函数指针,形参为两个int,返回值为int

int add(int a, int b)
{
	return a + b;
}
int min(int a, int b)
{
	return a - b;
}

PFun cal_func(char ops)		//返回值为函数指针
{
	switch (ops)
	{
	case '+':
		return add;
		break;
	case '-':
		return min;
		break;
	}
	return NULL;
}

int main_typedef(int a,int b,char ops)
{
	PFun pFun = cal_func(ops);
	int r = pFun(a, b);
	printf("result :%d %c %d = %d  \n", a, ops, b, r);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

2.用于结构别名struct

比较合规的用法:

struct TAG
{
	int a;
}
struct TAG veg;
  • 1
  • 2
  • 3
  • 4
  • 5

如果使用typedef,可以省略声明过程中的struct,但是这个关键字具有提示作用,没有必要省略

typedef struct TAG	//TAG可以省略
{
	int a;
}TYPE;
TYPE veg;
  • 1
  • 2
  • 3
  • 4
  • 5

注意事项

  1. 虽然 typedef 并不真正影响对象的存储特性,但在语法上它还是一个存储类的关键字,就像 auto、extern、static 和 register 等关键字一样。因此,像下面这种声明方式是不可行的:
typedef static int INT_STATIC;  //错误示例
  • 1

原因是不能声明多个存储类关键字,由于 typedef 已经占据了存储类关键字的位置,因此,在 typedef 声明中就不能够再使用 static 或任何其他存储类关键字了。


《C专家编程》P67

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/952116
推荐阅读
相关标签
  

闽ICP备14008679号