结构体基础知识小结

结构体基础知识小结


一些对结构体基础知识的总结,可能对小白比较友好,有歧义处还请指正,未完待续

结构体概念

首先,让我们来看一下结构体的基础概念:

结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”
,其描述了一块内存区间的大小及解释意义。

定义结构体变量

结构体的样子如下:

struct book{
    char title[20];
    char author[20];
    double value;
};
struct book library;
//和下面的形式相同
struct book{
    char title[20];
    char author[20];
    double value;
}library;

在上面那段代码中,struct是关键字,表明跟在后面的是结构体book是结构体的标记(可以看作是该结构体的名字),便于在main函数里引用

struct book library;//在main函数里的声明  注意!声明写在main函数里

我们创建了一个结构变量library,该变量的结构布局是book(就是和book结构体长得一样!)。

在book结构体内部,我们可以定义各种类型的变量,如int,double,char,甚至可以嵌套一个结构体(后面详细介绍)。

无论是在main函数里声明library,还是直接在花括号后面声明效果一样!

定义结构体数组

struct book read[10];

上面的代码块中定义了一个结构体数组,表明read是一个含有十个元素的数组,数组的每个元素都是book结构布局的结构体。

定义结构体指针

struct book *p;

该声明并未创建一个新的结构,但是指针p现在可以指向任意现有的book类型的结构
例如,如果library是一个book类型的结构,可以这么写:

p=&library;

访问结构体成员

library.value;

以上方法均可以访问结构体成员,library.value表示访问library中的value部分。

访问结构体数组成员

read[0].value//正确
read.value[0]//错误

结构体数组的访问要带下标,上面表示访问read数组第0个元素的value变量。

访问结构体指针成员

p->value==library.value
(*p).value==library.value

p是一个指针,p->value是该指针所指向结构的一个成员。

结构体的初始化

//一一对应
struct book library={"阿哈算法","阿哈磊",45.00};
//中间用逗号隔开,字符和字符串有双引号
//末尾分号
//任意顺序
struct book library={
    .value=45.00,
    .author="阿哈磊",
    .title="阿哈算法"
};


//指定
struct book library={.value=45.00};
//只有value被赋值
//输入型
scanf("%s %s %lf",library.title,library.author,&library.value);
//字符类无需&

//数组类
int i,n;
for(i=0;i<n;i++){
    scanf("%s %s %lf",library[i].title,library[i].author,&library[i].valu);
}
//与数组类似
//指针赋值
struct book *p;
p=&library;
scanf("%s %s %lf",p->title,p->author,p->value);

嵌套结构

struct book{                 //第一个结构
    char title[20];
    char author[20];
    double value;
};

struct student{               //第二个结构
    struct book library;      //嵌套结构
    int bir;
    char name[40];
};

提到嵌套结构,就不得不提到内存对齐问题,详见另一篇博客https://blog.csdn.net/weixin_57133901/article/details/124291243

未完待续!!!
撒花💐!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值