typedef重新定义函数(数据结构,构造三元组,为什么typedef放在main外面typedef具体的作用以及头文件的写法)

本文目录
- 数据结构,构造三元组,为什么typedef放在main外面typedef具体的作用以及头文件的写法
- 单片机中宏定义与重新定义数据类型(typedef)区别,并且各自的优势(初学单片机)
- typedef一个结构体指针变量再去定义一个变量什么意思
- typedef到底怎么用请问这句代码如何理解
- typedef double (*Func) (pointer item, pointer data)
数据结构,构造三元组,为什么typedef放在main外面typedef具体的作用以及头文件的写法
作用之一:typedef可用来给数据类型关键词起个别名,用这别名代替关键词可以起到原来相同的作用,与关键词同义,原有的int、double等和自定义的struct等类型都可以用到
如typedef int ElemType
则ElemType就是int
ElemType m;就是int m;
typedef int ElemType写在程序的开头前面几行,在main()外,也不在任何一个函数的函数头、函数体中,则是【全局声明】,
表明以后出现在所有函数的函数头、函数体中的ElemType都是指int,把ElemType当做int
像int i;这样的,只写在函数内的,为【局部声明】
作用二(与作用一类似,有小小的差异,所以我把它分开来看):给指针类型起别名,隐藏性定义指针(不是新定义,而是完全等同替换,换汤不换药,本质是一样的,多包了一层马甲,这样就把数据类型隐藏起来)
typedef ElemType *Trp;//指向整型的指针类型Trp
含义是Trp=ElemType *=int *
Trp t;就是int * t;
以上两种情况,都要看到“typedef .....;”才知道说的是什么类型
malloc 是个函数,用来(动态)申请新的内存空间
原型为
void *malloc(int size);(void*含义是返回的指针值指向的类型(返回值是指针)不定,类型size指的是字节数,即用户申请分配的内存空间的大小)
可换为(int *)malloc(int size)等
sizeof(ElemType)→“整型数据占的字节数、整数所占的内存大小”
if(!(t=.....))
!(t=.....) (括号内的表达式t=......的值有0或者非0(布尔值),即t=....为假或为真(”真“表示仍可以有返回的指针,”假“表示不能返回指针了,内存已满,开辟不了可以放指针的新空间,自然就没有返回了)
,对应的整个表达式!(t=.....)的值“非0或者0,为真或为假”,关系到下方的程序是否被执行,!(t=.....)为真就表示可执行)(if((t=.....))的含义是如果内存还有剩余,内存还可用,就申请新内存,返回指针给t, 加!后是相反的含义)
单片机中宏定义与重新定义数据类型(typedef)区别,并且各自的优势(初学单片机)
1) #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
2) typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
3)typedef比#define更安全。举个例子:
typedef char* pStr1;
#define pStr2 char *
pStr1 s1, s2;
pStr2 s3, s4;
在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
typedef一个结构体指针变量再去定义一个变量什么意思
PDRIVER_EXTENSION DriverExtension;等价于
struct _PDRIVER_EXTENSION DriverExtension;
你会发现
PDRIVER_EXTENSION等价于struct _PDRIVER_EXTENSION
为什么?注意前面的typedef的用法,这时的*PDRIVER_EXTENSION并不是结构体指针变量,而是一个结构体指针类型,DriverExtension才是结构体指针变量
他的定义遵循 《类型》 《变量》
typedef的用法,举个简单例子
typedef int AAA
相当于AAA = int,也就是说AAA为int 类型,int a;等价于AAA a;
AAA是int类型,a是int类型变量
那么typedef的意思就是重新定义变量类型的名字
回答补充:
额。。。你还是没理解,因为PDRIVER_EXTENSION是结构体《指针》类型,由他定义的变量为结构体《指针》变量,根结构体变量是两个概念
那DriverExtension-》DriverObject=函数地址,这怎么理解?
你没给函数代码,还有部分指针操作代码,但根据你的表达方式可看出,此目标函数的类型为结构体函数指针
又因为指针只能操作地址,结构体成员DriverObject保存了目标函数的地址,相当于DriverObject=函数地址,而结构体指针变量DriverExtension调用结构体成员DriverObject,相当于DriverExtension-》DriverObject
也就是说DriverExtension调用了DriverObject保存了函数地址
typedef到底怎么用请问这句代码如何理解
typedef用于定义新的类型。你给出的是一个函数指针类型。定义了一种函数指针类型tMessageBoxA。用它可以定义函数指针变量,用于保存函数地址。
typedef double (*Func) (pointer item, pointer data)
typedef double (*Func) (pointer item, pointer data)
double (*FuncPtr) (pointer item, pointer data)声明的是一个函数指针类型变量FuncPtr,该变量指向原型为double x(pointer item, pointer data)的函数。
原语句的意思是将指向原型为double x(pointer item, pointer data)的函数指针类型名字重新定义为Func。
这里要注意typedef double (*Func) (pointer item, pointer data)和double (*Func) (pointer item, pointer data)意思有本质上的差别,Func前者是类型名,后者是变量名。
例子:
没有类型重定义(typedef):
#include 《stdio.h》
#include 《stdlib.h》
double max_d(double a, double b)
{
return __max(a, b);
}
int main()
{
double (*x)(double a, double b);
x = max_d;
printf("%lf\n", x(0.1, 0.2));
return 0;
}
有类型重定义:
#include 《stdio.h》
#include 《stdlib.h》
typedef double (*FUNC)(double a, double b);
double max_d(double a, double b)
{
return __max(a, b);
}
int main()
{
FUNC x = max_d;
printf("%lf\n", x(0.1, 0.2));
return 0;
}
希望我的回答能对你有所帮助!
如果还有不明白的地方可以BaiduHi我。

更多文章:
webservice接口集成平台(webservice接口老不老)
2025年11月21日 12:15
怎么做linux系统盘(如何制作启动u盘安装linux系统)
2026年4月20日 22:15
resume个人简历(留学个人简历resume的主要内容介绍)
2025年12月4日 21:00
transformers卡牌游戏(收藏战斗两不误变形金刚前线稀有卡牌全攻略)
2026年7月22日 21:15
命令提示符无法打开mysql(mysql命令行输入命令回车后没反应怎么回事具体如图)
2025年7月8日 13:30
怎么在字符数组后加字符串((C语言)如何将char**作为字符串数组,并且动态地添加字符串到其中)
2026年7月6日 11:30
chinesechildren是什么意思(Chinese+children是几个单词)
2025年12月17日 01:00
python版本(下载Python后发现还是之前的版本怎么办)
2025年11月29日 22:45
unix和windows的关系(WINDOWS与UNIX的联系)
2025年11月19日 16:45
powermill五轴编程(powermill编程软件!谁能详细介绍一下它的主要功能啊!还有它可以绘图么编程中要用到边界线等等…怎)
2026年8月11日 07:15
substantial变形单词(哪些英语单词可以表达 “重要的” 以及它们的区别)
2026年1月13日 17:00












