我正在查看定义为的LPSTR
typedef char* PSTR, *LPSTR;
文档说 PSTR 是 LPSTR 的别名。取消引用运算符缺失的事实是否足以告诉我它是别名?别名是如何声明的?换句话说,如果我将其更改为
typedef char* PSTR, PSTR2, *LPSTR;
我现在有两个别名吗?如果我添加另一个取消引用的变量怎么办?
typedef char* PSTR, *LPSTR, *LPSTR2;
别名的意思是
typedef char* PSTR, *LPSTR;
相当于
typedef char *PSTR;
typedef char *LPSTR;
所以它们是完全相同的类型:char*
. (您必须在第一种形式中键入两次的事实*
是 C 声明语法的一个怪癖。)
顺便说一句,这些不是“取消引用的变量”。它们是指针类型。
什么都没有。星号周围的空格无关紧要。
这个:
typedef char* PSTR, *LPSTR;
是相同的
typedef char *PSTR, *LPSTR;
这又与拥有相同
typedef char *PSTR;
typedef char *LPSTR;
两者都为类型“pointer to char
”定义了类型别名,但它们之间没有联系,它们都被声明为相同的typedef
事实并不重要,主要是在你想要变体时完成(有和没有指针)像这样:
typedef struct {
int x, y;
} Point, *PointPtr;
顺便说一句,我真的不鼓励这种做法(就像问题本身的代码一样),因为“隐藏星号”通常是个坏主意。那个星号很重要,让它出现而不是隐藏在类型中会使代码更清晰。
typedef char* PSTR, PSTR2, *LPSTR;
PSTR 是一个指针,LPSTR 是一个指针,但 PSTR2 是一个字符。我会用不同的方式写它:
typedef char *PSTR, PSTR2, *LPSTR;
显示 * 真正关联的位置。