关于结构体的自引用
在结构体里包含个自身类型的成员,是不可行的,例如:
struct S
{
char a;
int b;
double c;
struct S next;
};
一个结构体里套一个结构体,里面还套一个结构体…
无穷无尽个系统最终会崩溃
因为你套的这个 next 变量(struct S类型)的大小无法计算
正确自引用方法应该是:
#include<stdio.h>
struct S
{
char a;
int b;
double c;
struct S* next;
};
int main()
{
return 0;
}
里面放一个指针(struct S类型)就好,因为一个指针里存放的是一个地址,地址的大小确定(32位机器上是4个字节,64位机器上是8个字节),这样一个结构体里面放下一个结构体的地址,指向的下一个结构体里又有指向下下个结构体的指针,最终会连起来。
结构体的定义变量和初始化有两种方式
第一种是在声明变量类型(struct S)的时候就定义变量:
struct S
{
char a;
int b;
double c;
}s1;
如图所示
当然,如果你还想初始化,就在后面加上变量对应内容,形式类似于
int a = 3;
struct S
{
char a;
int b;
double c;
}s1 = {'a',4,3.00};
第二种定义变量和初始化的方式为在函数体内定义和初始化
例如:
int main()
{
struct S s2 = {'a',3,4.00};
return 0;
}
这两种都可以
但,如果一个结构体里面套另一个结构体(不是自身类型)怎么办
struct S
{
char a;
int b;
double c;
};
struct D
{
int r;
short k;
struct S s1;
};
看,这样初始化就好:
struct S
{
char a;
int b;
double c;
};
struct D
{
int r;
short k;
struct S s1;
} s = {4,2,{'a',4,8.00}};
结构体类型变量就用{}进行包装,其他定义和上面讲的一样