c++ - "typedef"类型名称可以像 "struct"定义那样声明指向结构的指针吗?

标签 c++ c pointers struct typedef

给定:

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 to Card in the statement that we're given and appears adjacent to foo in the statement with *foo

* 的相邻性并不重要。因为无论您在哪里编写它,它的应用都是相同的。它修改新声明的实体,而不是类型。举例说明:

int *i, j;

将仅创建一个名为i的指针和一个名为j的常规整数。由于 typedef 语句遵循与变量声明相同的规则(typedef 关键字的应用只是将含义从引入新对象更改为引入新类型名称),因此* 的行为是等效的。这里的意思是:

typedef int *i, j;

* 再次仅修改 i。我们最终得到两个别名。别名 i 是指向 int 的指针的新类型名称,jint< 的别名.

事实上,我们可以将其重写如下以获得相同的效果:

typedef int j, *i;

同样,因为 * 仅修改 i

关于c++ - "typedef"类型名称可以像 "struct"定义那样声明指向结构的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973644/

相关文章:

c++ - decltype(void()) 和 decltype(void{}) 的区别

c++ - 根据编译时条件在类型之间进行选择的惯用方式

c - 警告 : cast to pointer from integer of different size [-Wint-to-pointer-cast]

c - 释放 C 中阻塞流的缓冲区

c - 从 C 中的二进制文件中获取 32 位指令

c++ - 成员函数如何传递 "this"指针

c - 不同 header 中的结构相互引用

c++ - Stringstream C++ while 循环

c++ - 为什么我的 ListBox 中仍然有字符串,即使在使用循环单独删除它们之后?

c - 引导加载程序的问题