请教下struct,typedef在编译器中声明的过程是怎样的?

总的来说,问题是struct,typedef在编译器中声明的过程是怎样的?
在第一个与第二个结构体声明中为什么能够声明指向自身类型的指针?
在第三个结构体声明中为什么不能用新类型名来声明呢? 这是在说,编译器的步骤是:struct Node1(知道有这个类型了)----Node2* next(再开始分析这句话)----Node2(最后才在知道有这个新类型名) 吗?

#include<iostream>
using namespace std;

struct Student
{
int date;
struct Studen* next;
};

typedef struct Node1
{
int date;
Node1* next;
}randow;

typedef struct
{
int date;
Node2* next;
}Node2;

void main()
{

}
修正一下问题
1总的来说,问题是struct,typedef在编译器中声明的过程是怎样的?
2在第一个与第二个结构体声明中为什么能够声明指向自身类型的指针?
3在第三个结构体声明中为什么不能用新类型名来声明呢? 这是在说,编译器的步骤是:struct(知道有这个类型,但它没有名字)----Node2* next(开始分析这句话)----Node2(最后才知道有这个新类型名) ,所以不能用新类型名来声明 结构体中的成员 ?

慕的地6264312
浏览 131回答 1
1回答

侃侃尔雅

指针是两个变量,一个是指针本身,一个是指向的对象。你声明结构体的时候里面有个指针,不管指什么,实例化的时候总能够开辟出内存来,指针就是4字节,指针前面的类型在声明的时候没有什么用,只有在解引用的时候才有用,所以声明的时候指不指向自身没有区别。但是不能定义该类的对象,类还没有定义就有了类对象,这不合逻辑,然后也没法开辟内存。其他的就是基础,要声明某个类型的变量,你得事先告诉编译器有这个类型。
打开App,查看更多内容
随时随地看视频慕课网APP