typedef char* p_char 与 #define p_char char* 的区别
在 C/C++ 语言中,typedef 和 #define 都可以用于定义类型别名,但是在处理指针时,两者有重要的区别。
1. typedef char* p_char;
typedef char* p_char;
p_char a, b;
等价于:
char* a;
char* b;
✅ typedef 让 p_char 代表 char*,所以 a 和 b 都是 char* 类型的指针。
2. #define p_char char*
#define p_char char*
p_char a, b;
预处理器展开后,代码变为:
char* a, b;
⚠ 这里 b 只是 char 类型,而不是 char*,等价于:
char* a;
char b;
这会导致 a 是指针,而 b 只是普通 char 变量,可能引发错误或意外行为。
3. 总结区别
| 方式 | 代码 | 解释 |
|---|---|---|
typedef | typedef char* p_char; | p_char a, b; 等价于 char* a; char* b;,a 和 b 都是指针 |
#define | #define p_char char* | p_char a, b; 展开后变成 char* a, b;,a 是指针,b 只是 char |
✅ 结论
typedef char* p_char;更加安全可靠,可以确保p_char代表char*,不会引入歧义。#define p_char char*可能会导致意外错误,因为p_char a, b;其实是char* a; char b;,b不是指针!
💡 建议:尽量使用 typedef 或 using(C++11 及以上)来定义指针类型,而不要使用 #define:
using p_char = char*; // C++11 推荐方式
252

被折叠的 条评论
为什么被折叠?



