C++ 类型定义c中不存在的结构
我目前正在学习指针和结构,我无法理解以下内容C++ 类型定义c中不存在的结构,c++,struct,typedef,C++,Struct,Typedef,我目前正在学习指针和结构,我无法理解以下内容 typedef struct at atom; struct at { int element = 5; struct at *next; } 为什么这段代码不会抛出错误 当我使用 atom x; printf("%d", x.element); 它将打印5 我不理解不存在结构的类型定义,它是如何工作的?这是一个向前的声明-在C语言中,你可以声明一个命名的东西将存在,而不需要在以后给出它的详细信息;这是最常见的用于允许知识循环
typedef struct at atom;
struct at {
int element = 5;
struct at *next;
}
为什么这段代码不会抛出错误
当我使用
atom x;
printf("%d", x.element);
它将打印5
我不理解不存在结构的类型定义,它是如何工作的?这是一个向前的声明-在C语言中,你可以声明一个命名的东西将存在,而不需要在以后给出它的详细信息;这是最常见的用于允许知识循环的方法;e、 g.
struct A
的指针指向struct B
,struct B
的指针指向struct C
,struct C
的指针指向struct A
。在这种特定的情况下,只要您说这些东西是结构,那么编译器就足够了解类型,从而知道适当的指针是什么样子
在本例中,您已经声明在处将有一个名为
的结构,并且希望将其称为atom
。如果在告诉编译器struct at
是什么样子之前试图声明一个atom
,那将是一个错误。但在此之前,编译器有足够的信息继续进行。这是一个正向声明-在C语言中,您可以声明命名的东西将存在,而不需要在以后给出它的详细信息;这是最常见的用于允许知识循环的方法;e、 g.struct A
的指针指向struct B
,struct B
的指针指向struct C
,struct C
的指针指向struct A
。在这种特定的情况下,只要您说这些东西是结构,那么编译器就足够了解类型,从而知道适当的指针是什么样子
typedef struct at atom;
在本例中,您已经声明在
处将有一个名为的结构,并且希望将其称为atom
。如果在告诉编译器struct at
是什么样子之前试图声明一个atom
,那将是一个错误。但在此之前,编译器有足够的信息继续进行
typedef struct at atom;
这里,您正在声明一个名为at
的struct
,并给它一个typedef
的atom
。这是完全有效的
struct at {
int element = 5;
struct at *next;
}
在这里,您将在前面声明的
处定义结构
注意:
需要注意的是,在C中,不允许像这里这样在结构中初始化变量:
struct at {
int element = 5; // <---- Illegal in C
struct at *next;
}
struct at{
int元素=5;//
在这里,您正在声明一个名为at
的struct
,并给它一个typedef
的atom
,因此这是完全有效的C
struct at {
int element = 5;
struct at *next;
}
在这里,您将在前面声明的
处定义结构
注意:
需要注意的是,在C中,不允许像这里这样在结构中初始化变量:
struct at {
int element = 5; // <---- Illegal in C
struct at *next;
}
struct at{
int element=5;//您忘记放置分号了
typedef struct at atom;
struct at {
int element = 5;
struct at *next;
}
^^^^
考虑到它是C++代码。在C中,您不能初始化其定义内的结构的数据成员。< /P>
本声明
typedef struct at atom;
声明两件事。首先,它在当前声明性区域中声明新类型struct at
。并且它为该类型atom
没有必要使每一项声明同时成为一项定义
首先声明位于
的结构,然后定义它
struct at {
int element = 5;
struct at *next;
};
例如,将thsi方法与函数进行比较。函数也可以多次声明,只定义一次。例如
void f();
void f();
//...
void f();
void f() { std::cout << "It is a joke" << std::endl; }
void f();
无效f();
//...
无效f();
void f(){std::cout您忘记放置分号了
typedef struct at atom;
struct at {
int element = 5;
struct at *next;
}
^^^^
考虑到它是C++代码。在C中,您不能初始化其定义内的结构的数据成员。< /P>
本声明
typedef struct at atom;
声明两件事。首先,它在当前声明性区域中声明新类型struct at
。并且它为该类型atom
没有必要使每一项声明同时成为一项定义
首先声明位于
的结构,然后定义它
struct at {
int element = 5;
struct at *next;
};
例如,将thsi方法与函数进行比较。函数也可以多次声明,只定义一次。例如
void f();
void f();
//...
void f();
void f() { std::cout << "It is a joke" << std::endl; }
void f();
无效f();
//...
无效f();
在C中,CX@ L3X不允许使用Stutt成员(<代码> int元素=5;< /C> >),但您可以这样做,但是C++中的C.@ L3X不允许Strut成员()初始化,您是正确的,但是,您可以这样做:C++。