给定:
typedef Card* Cardptr;
这是否意味着下面声明中的 foo
Cardptr foo;
与此声明中的相同吗?:
struct Card{
} *foo;
外观*
符号让我感到困惑,因为它出现在我们给出的语句中的 Card 旁边,并且出现在 foo
旁边。在声明中 *foo
最佳答案
Does this mean that foo in the following declaration ... is the same as in this declaration? ...
是和否。我之所以说"is",是因为这两个声明都声明了一个指向名为 Card
的类型的指针变量(在 C++ 中,对于 C 也适用,它必须是 struct Card
)。但并不完全相同。
第一个声明可以引入所谓的“不透明句柄”。此时不需要完全定义该结构。您可以传递指向它的指针,但在看到完整定义之前您将无法访问任何成员。
第二个声明引入了完整的类型并立即创建一个指向它的指针。它相当于看到完整结构定义后的第一种情况。
The appearance of the
*
symbol has me confused because it appears adjacent toCard
in the statement that we're given and appears adjacent tofoo
in the statement with*foo
*
的相邻性并不重要。因为无论您在哪里编写它,它的应用都是相同的。它修改新声明的实体,而不是类型。举例说明:
int *i, j;
将仅创建一个名为i
的指针和一个名为j
的常规整数。由于 typedef
语句遵循与变量声明相同的规则(typedef
关键字的应用只是将含义从引入新对象更改为引入新类型名称),因此*
的行为是等效的。这里的意思是:
typedef int *i, j;
*
再次仅修改 i
。我们最终得到两个别名。别名 i
是指向 int
的指针的新类型名称,j
是 int< 的别名
.
事实上,我们可以将其重写如下以获得相同的效果:
typedef int j, *i;
同样,因为 *
仅修改 i
。
关于c++ - "typedef"类型名称可以像 "struct"定义那样声明指向结构的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973644/