0

我正在查看定义为的LPSTR

typedef char* PSTR, *LPSTR;

文档说 PSTR 是 LPSTR 的别名。取消引用运算符缺失的事实是否足以告诉我它是别名?别名是如何声明的?换句话说,如果我将其更改为

typedef char* PSTR, PSTR2, *LPSTR;

我现在有两个别名吗?如果我添加另一个取消引用的变量怎么办?

typedef char* PSTR, *LPSTR, *LPSTR2;

4

3 回答 3

2

别名的意思是

typedef char* PSTR, *LPSTR;

相当于

typedef char *PSTR;
typedef char *LPSTR;

所以它们是完全相同的类型:char*. (您必须在第一种形式中键入两次的事实*是 C 声明语法的一个怪癖。)

顺便说一句,这些不是“取消引用的变量”。它们是指针类型。

于 2012-07-03T14:52:09.447 回答
2

什么都没有。星号周围的空格无关紧要。

这个:

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;

顺便说一句,我真的不鼓励这种做法(就像问题本身的代码一样),因为“隐藏星号”通常是个坏主意。那个星号很重要,让它出现而不是隐藏在类型中会使代码更清晰。

于 2012-07-03T14:52:50.190 回答
1
typedef char* PSTR, PSTR2, *LPSTR;

PSTR 是一个指针,LPSTR 是一个指针,但 PSTR2 是一个字符。我会用不同的方式写它:

typedef char *PSTR, PSTR2, *LPSTR;

显示 * 真正关联的位置。

于 2012-07-03T14:54:08.023 回答