"struct type variablename"声明有效吗?
Is "struct type variablename" valid as a declaration?
我的讲师只是坚持认为以下是有效的C 语句:
struct charlistrecord *next
在宣布C/C 的递归数据类型时发现了完整条件:
typedef struct charlistrecord
{
char data;
struct charlistrecord *next;
} *charlist;
我想知道是否有一段时间被接受语法,还是我只是愚蠢的几个月以为我知道C 。
在c 和typedefs的假设之前,获得打字结构的唯一方法是通过此语法,这是获得自我的唯一的方法-type连锁节点。
struct Foo
{
int val;
struct Foo *link;
};
在C中,这需要任何使用foo的用法为:
struct Foo foo;
struct Foo *foo_ptr;
等。
typedef通过这样做为此提供了帮助:
typedef struct Foo
{
int val;
struct Foo *link;
} Foo;
从现在开始,您可以这样做:
Foo foo; // same as struct Foo
Foo *foo_ptr; // same as struct Foo *
注意:使用类型为别名,struct Name
不仅限于Name
作为别名。Yo也可以做到这一点:
typedef struct Foo
{
int val;
struct Foo *link;
} Bar;
现在以下是可行的;
struct Foo foo;
Bar bar;
struct Foo *fooptr = &bar;
Bar *barptr = &foo;
真的让您希望自己在C中进行编程,不是吗?可能没有清理东西,但希望灰色少一些。
这是C的宿醉。在C中,您必须如何宣布结构变量和成员,因此由于向后兼容的原因,它在C 中是合法的。听起来您的讲师有点"老式"。
是的,它是完全有效的。struct
一词在这里只是明确指出next
是结构类型的指针 naty charlistrecord
。
这是C的回忆,您也可以省略C 中的关键字,但是如果您想使用它,则可以。
它是完全有效的,如果您的struct的名称被变量遮蔽,甚至可以有用,例如:
:struct C {};
int C = 0;
int a;
void foo() {
C *a; // multiplies int C by int a
struct C *a; //defines 'a' as pointer to struct C
}
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- "struct type variablename"声明有效吗?