0

私は次のように定義されているLPSTRを見ています

typedef char* PSTR, *LPSTR;

ドキュメントには、PSTRはLPSTRのエイリアスであると記載されています。間接参照演算子が欠落しているため、エイリアスであることがわかりますか?エイリアスはどのように宣言されますか?言い換えれば、これをに変更すると

typedef char* PSTR, PSTR2, *LPSTR;

2つのエイリアスがありますか?別の逆参照変数を追加するとどうなりますか?

typedef char* PSTR, *LPSTR, *LPSTR2;

4

3 に答える 3

2

エイリアスの意味するところは

typedef char* PSTR, *LPSTR;

と同等です

typedef char *PSTR;
typedef char *LPSTR;

したがって、それらはまったく同じタイプです:のエイリアスchar*。(最初の形式で2回入力する必要があるという事実*は、C宣言構文の癖です。)

ところで、これらは「逆参照変数」ではありません。それらはポインタ型です。

于 2012-07-03T14:52:09.447 に答える
2

欠けているものはありません。アスタリスクの周りの空白は関係ありません。

これ:

typedef char* PSTR, *LPSTR;

と同じです

typedef char *PSTR, *LPSTR;

これは順番に持っているのと同じです

typedef char *PSTR;
typedef char *LPSTR;

どちらも「pointerto」型の型アリサを定義します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 に答える