"typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
Can "typedef" type names declare a pointer to a struct, like "struct" definitions do?
给定:
typedef Card* Cardptr;
这是否意味着foo在以下声明中
Cardptr foo;
是否与本声明相同?:
struct Card{
} *foo;
*
符号的出现让我感到困惑,因为它在我们给出的语句中出现在Card附近,而在具有*foo
的语句中显示在foo
附近
这是否意味着以下声明中的foo。。。与本声明中的内容相同吗。。。
是和否。我之所以说是,是因为这两个声明都声明了一个指向名为Card
的类型的指针变量(在C++中,要应用C,它必须是struct Card
(。但这并不完全一样。
第一个声明可以引入所谓的"不透明句柄"。此时不需要完全定义结构。您可以四处传递指向它的指针,但在看到完整的定义之前,您将无法访问任何成员。
第二个声明引入了完整的类型,并立即创建一个指向它的指针。这相当于看到完整结构定义后的第一种情况。
*
符号的出现让我感到困惑,因为它在给定的语句中出现在Card
附近,在具有*foo
的语句中显示在foo
附近
*
的邻接性是不重要的。因为无论你在哪里写它,它都是一样的。它修改新声明的实体,而不是类型。举例说明:
int *i, j;
将只创建一个指针,名为i
,以及一个正则整数j
。由于typedef
语句遵循与变量声明相同的规则(typedef
关键字的应用只是将含义从引入新对象更改为引入新类型名称(,因此*
的行为是等效的。意思是:
typedef int *i, j;
CCD_ 16再次仅修改CCD_ 17。我们最后得到了两个别名。别名i
是指向int
的指针的新类型名称,以及j
是int
的别名。
事实上,我们本可以将其改写如下以获得相同的效果:
typedef int j, *i;
同样,因为*
仅修改i
。
[对于C++]是:您可以在struct Card
定义的末尾创建一个变量foo
,它是Card*
,如您所示,它等效于上面的Cardptr foo
(假设Card
的早期定义(,如中所示
struct Card {
};
typedef Card* Cardptr;
Cardptr foo;
为了简洁起见,人们有时会做后面的*foo
,这样可以避免重复类型。
- 在哪里声明结构运算符重载
- 如何正确转发声明结构"using XXX"?
- 在C++我可以在不在本地声明结构的情况下将结构作为指针传递吗?
- 在 for 循环中声明结构是否合法C++?
- 为什么我们可以创建一个模板类结构,其中包含许多与声明结构时指定的参数不同的参数
- 当声明结构数组时,CPPCHECK停止对整个文件的分析
- C++ - 声明结构和类时不允许使用不完整的类型
- 在声明末尾或 main 中声明结构或类实例之间的区别
- 在模板类中声明结构,未为成员函数定义
- C++ .h 文件中转发声明结构,并在.cpp文件中定义结构
- 如何在C++中声明结构变量
- 在 C 中声明结构的新实例
- 在类内部声明结构
- 为什么可以用相同的名称声明结构和非结构
- 在结构定义内部声明结构的堆栈
- 为什么在声明结构时不能初始化结构中的向量成员?
- 在c++头文件中声明结构体
- 如何声明结构体?
- c++中声明结构体的问题
- 只在库cpp中有定义的前向声明结构