我正在查看定义为
的LPSTR typedef char* PSTR, *LPSTR;
文档说PSTR是LPSTR的别名。事实是dereference运算符缺少足以告诉我它是别名吗?别名如何宣布?换句话说,如果我将其更改为
typedef char* PSTR, PSTR2, *LPSTR;
我现在有两个别名吗?如果我添加另一个解除引用的变量怎么办?
typedef char* PSTR, *LPSTR, *LPSTR2;
答案 0 :(得分:2)
别名是什么意思
typedef char* PSTR, *LPSTR;
相当于
typedef char *PSTR;
typedef char *LPSTR;
所以它们的类型完全相同:char*
的别名。 (你必须在第一种形式中输入*
两次的事实是C声明语法的怪癖。)
顺便说一句,这些不是“解除引用的变量”。它们是指针类型。
答案 1 :(得分:2)
没有遗漏任何东西。星号周围的空白并不重要。
此:
typedef char* PSTR, *LPSTR;
与
相同typedef char *PSTR, *LPSTR;
反过来与
相同typedef char *PSTR;
typedef char *LPSTR;
两者都为“指向char
的指针”类型定义了类型alisa,但是它们之间没有任何联系,它们都是用相同的typedef
声明的事实并不重要,当你想要变体(有和没有指针)时,大部分时间就完成了:
typedef struct {
int x, y;
} Point, *PointPtr;
顺便说一下,这是一种我真的劝阻的做法(就像问题本身的代码一样),因为“隐藏星号”通常是一个坏主意。那个星号很重要,并且让它存在而不是隐藏在类型中会使代码更清晰。
答案 2 :(得分:1)
typedef char* PSTR, PSTR2, *LPSTR;
PSTR是指针,LPSTR是指针,但PSTR2是char。我会用不同的方式写出来:
typedef char *PSTR, PSTR2, *LPSTR;
显示*真正关联的位置。