
C指针之再论typedef
发布日期:2021-05-07 15:11:53
浏览次数:16
分类:精选文章
本文共 1472 字,大约阅读时间需要 4 分钟。
再论typedef
- C语言的2种类型:内建类型与用户自定义类型
- 内建类型ADT、自定义类型UDT
- typedef定义(或者叫重命名)类型而不是变量
- 类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是占内存的。
- 面向对象的语言中:类型就是类class,变量就是对象。
- typedef与#define宏的区别
- typedef char *pChar;
- #define pChar char *
- typedef与结构体
- 结构体在使用时都是先定义结构体类型,再用结构体类型去定义变量。
- C语言语法规定,结构体类型使用时必须是struct 结构体类型名 结构体变量名;这样的方式来定义变量。
// 定义了一个结构体类型,这个类型有2个名字:第一个名字是struct student,第二个类型名叫student_ttypedef struct student{ char name[20]; int age;}student_t;struct student s1; // struct student是类型;s1是变量s1.age = 12;student_t s2;
// 第一个类型名:struct student,第二个类型名是studenttypedef struct student{ char name[20]; int age;}student;struct student s1;s1.age = 12;student s2;
// 我们一次定义了2个类型:// 第一个是结构体类型,有2个名字:struct teacher,teacher// 第二个是结构体指针类型,有2个名字:struct teacher *, pTeachertypedef struct teacher{ char name[20]; int age; int mager;}teacher, *pTeacher;
- 使用typedef一次定义2个类型,分别是结构体变量类型,和结构体变量指针类型。
typedef与const
- typedef int *PINT;
- const PINT p2; 相当于是int *const p2;
- const int *p和int *const p是不同的。前者是p指向的变量是const,后者是p本身const
- typedef int *PINT;
- PINT const p2; 相当于是int *const p2;
- 如果确实想得到const int *p;这种效果,
- 只能typedef const int * CPINT; CPINT p1;
使用typedef的重要意义(2个:简化类型、创造平台无关类型)
- 简化类型的描述。
- char *(*)(char *, char *);
- typedef char *(*pFunc)(char *, char *);
- 很多编程体系下,人们倾向于不使用int、double等C语言内建类型,因为这些类型本身和平台是相关的(譬如int在16位机器上是16位的,在32位机器上就是32位的)。
- 为了解决这个问题,很多程序使用自定义的中间类型来做缓冲。譬如linux内核中大量使用了这种技术.
- 内核中先定义:
- typedef int size_t;
- 然后在特定的编码需要下用size_t来替代int(譬如可能还有typedef int len_t)
- STM32的库中全部使用了自定义类型
- 譬如typedef volatile unsigned int vu32;
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月17日 03时14分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2021-05-09
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
2021-05-09
算法学习笔记: 珂朵莉树
2021-05-09
Codeforces Round #664 题解(A ~ C)
2021-05-09
Problem A - Sequence with Digits (数学推导)
2021-05-09
Problem 330A - Cakeminator (思维)
2021-05-09
LeetCode75 颜色分类 (三路快排C++实现与应用)
2021-05-09
docker基础:容器生命周期管理命令
2021-05-09
Shell脚本学习指南
2021-05-09
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
2021-05-09
C# 规范建议
2021-05-09
C语言+easyX图形库的推箱子实现
2021-05-09
反汇编-流程控制语句-2-循环控制语句分析
2021-05-09
调试vs2019代码的流程
2021-05-09
游戏外挂基础-概述
2021-05-09
脱壳与加壳-加壳-6-代码实现加密导入表
2021-05-09
Typora配置PicGo时,提示Failed to fetch
2021-05-09
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
2021-05-09
bcolz的新操作
2021-05-09
Linux的s、t、i、a权限(转)
2021-05-09