结构可以是"卡*"类型吗?(书中的例子)

Mar*_*Kim 1 c++ syntax pointers typedef

我的书说

typedef Card* Cardptr;
Run Code Online (Sandbox Code Playgroud)

"将新类型名称定义为类型Cardptr的同义词Card*." 我看到*符号仅修改Cardptr,如果还有其他同义词,则不会被*符号修改.这对我来说很困惑.我的书让它看起来像实际的结构类型Card*,这让我觉得其他同义词的类型Card*也是如此

typedef Card* Cardptr, n;
Run Code Online (Sandbox Code Playgroud)

哪里n也会有这种类型Card*.如果他们移动这样的*符号,会不会更清楚?

typedef Card *Cardptr, n;
Run Code Online (Sandbox Code Playgroud)

这样一来,你就知道该类型实际上是Card,这Cardptr仅仅是一个指向它,这n是不是一个指针.这是什么原因?

YSC*_*YSC 5

C++通常不关心空格,因此编译器认为以下两个语句是相同的:

typedef Card* Cardptr;
typedef Card *Cardptr;
Run Code Online (Sandbox Code Playgroud)

同样,三个声明

int* a;
int *a;
int * a;
Run Code Online (Sandbox Code Playgroud)

无法区分.


如果它们移动了会不会更清楚*[so]你会知道类型实际上是Card,它Cardptr只是指向它的指针,而n不是指针.这是什么原因?

编码人员编写声明的方式只是品味和风格的问题,两者都是合理的:

这将使我更喜欢int *aint* a:

int* a,b; // declares and int* and an int; illogical, right?
Run Code Online (Sandbox Code Playgroud)

这将使我更喜欢int* aint *a:

int *a = 0; // a (an int*) is set to zero (a.k.a NULL), not *a; illogical, right?
Run Code Online (Sandbox Code Playgroud)

现在,我的建议是:在这两种形式之间进行选择并始终坚持下去.