别名的语法

时间:2012-07-03 14:49:04

标签: c

我正在查看定义为

LPSTR

typedef char* PSTR, *LPSTR;

文档说PSTR是LPSTR的别名。事实是dereference运算符缺少足以告诉我它是别名吗?别名如何宣布?换句话说,如果我将其更改为

typedef char* PSTR, PSTR2, *LPSTR;

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

typedef char* PSTR, *LPSTR, *LPSTR2;

3 个答案:

答案 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;

显示*真正关联的位置。