C语言 关于结构体和位段(二)自引用,定义和初始化

关于结构体的自引用
在结构体里包含个自身类型的成员,是不可行的,例如:

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}};

结构体类型变量就用{}进行包装,其他定义和上面讲的一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值