typedef

typedef关键字					
					
					
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。					
这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。					
					
1、对已有类型定义别名					
					
typedef unsigned char BYTE;					
typedef unsigned short WORD;					
typedef unsigned int DWORD;					
					
					
2、一维数组类型的定义格式					
					
typedef int vector[10]; //typedef [10]int vector;	
					
int main(int argc, char* argv[])					
{					
	vector v;				
					
	v[0] = 1;				
	v[1] = 2;				
	v[2] = 3;				
	v[3] = 4;				
	v[4] = 5;				
					
					
	return 0;				
}					
					
3、 二维数组类型的定义格式					
					
					
typedef int 名字[5][5];					
typedef int nameTable[5][5][5];					
					
int main(int argc, char* argv[])					
{					
	matrix v;				
	nameTable n;				
					
	v[0][0] = 1;				
	v[0][1] = 2;				
	v[0][2] = 3;				
	v[0][3] = 4;				
	v[0][4] = 5;				
					
	n[0][0][0] = 1;				
					
	return 0;				
}					
					
					
					
4、结构体的定义格式					
					
typedef struct student					
{					
	int x;				
	int y;				
}stu;					
					

11-13
### typedef 的基本概念 `typedef` 是 C 和 C++ 中用于为已有数据类型创建别名的关键字,其主要作用是提高代码可读性和维护性,尤其在处理复杂类型声明时更为有效[^2]。通过 `typedef` 定义的名称并不是新类型,而是现有类型的同义词。 --- ### 基本语法格式 ```cpp typedef 已有类型名 新类型别名; ``` 该语句将“新类型别名”作为“已有类型名”的别名,在后续代码中可以像使用原始类型一样使用这个别名[^4]。 --- ### 常见用法示例 #### 1. 为基础数据类型定义别名 常用于简化跨平台开发中的类型管理: ```cpp typedef unsigned long ulong; typedef unsigned int uint32_t; typedef char* string_ptr; ulong value = 100UL; // 使用 ulong 替代 unsigned long string_ptr str = "hello"; // str 是指向字符的指针 ``` 这种方式提升了代码简洁度并增强了移植性[^2]。 #### 2. 为结构体定义别名 传统 C 风格下需重复书写 `struct` 关键字,而 `typedef` 可消除冗余: ```cpp typedef struct { int x; int y; } Point; // 此后可以直接使用 Point 而无需 struct 关键字 Point p1 = {1, 2}; Point p2 = {.x = 3, .y = 4}; // 支持指定初始化(C99及以上) ``` 此方法广泛应用于嵌入式编程和图形计算等领域[^2]。 #### 3. 同时定义多个别名(含指针) 可以在一条 `typedef` 语句中为同一基础类型定义多种变体: ```cpp typedef int MyInt, *IntPtr, (&RefToInt)[5]; MyInt i = 10; // 等价于 int i = 10; IntPtr pi = &i; // 等价于 int* pi = &i; int arr[5] = {}; RefToInt ref_arr = arr; // 引用数组(高级用法) ``` 注意:此处 `IntPtr` 成为了 `int*` 的别名,体现了 `typedef` 对复合类型的灵活支持[^5]。 #### 4. 函数指针类型的别名定义 这是 `typedef` 最强大的应用场景之一——封装复杂的函数签名: ```cpp typedef int (*CompareFunc)(const void*, const void*); // 示例回调函数匹配 CompareFunc 类型 int compare_ints(const void* a, const void* b) { return (*(int*)a - *(int*)b); } // qsort 接受 CompareFunc 类型参数 #include <cstdlib> extern "C" void qsort(void* base, size_t num, size_t size, CompareFunc cmp); int numbers[] = {5, 2, 8, 1}; qsort(numbers, 4, sizeof(int), compare_ints); ``` 上述方式极大提高了接口抽象能力与调用安全性[^2]。 #### 5. 结合枚举、联合体使用 ```cpp typedef enum Color { RED, GREEN, BLUE } Color; Color background = RED; typedef union Data { int i; float f; double d; } Data; Data data; data.i = 42; // 当前活跃成员为整数 ``` 此类组合常见于协议解析或硬件寄存器映射场景[^3]。 --- ### 注意事项与陷阱 - **不引入新类型**:`typedef` 创建的是别名而非独立类型,因此不能实现类型安全检查。 - **易混淆的指针别名写法**: ```cpp typedef char* StringPtr; StringPtr s1, s2; // 实际效果等价于 char* s1, s2 → s2 并非指针! ``` 若希望两者均为指针,应分别声明或改用现代风格(如 using 或容器类)。 - **宏替换差异**:相比预处理器指令 `#define`,`typedef` 遵循作用域规则且由编译器解析,更安全可靠[^3]。 --- ### C++ 中替代方案 —— `using` 自 C++11 起推荐使用更具表达力的 `using` 语法代替部分 `typedef` 场景: ```cpp using IntPtr = int*; template<typename T> using Vec = std::vector<T>; Vec<int> vec{1, 2, 3}; // 更清晰地表示模板别名 ``` 尽管如此,`typedef` 在遗留系统和标准库兼容方面仍具重要地位。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值