结构体基础知识小结
一些对结构体基础知识的总结,可能对小白比较友好,有歧义处还请指正,
结构体概念
首先,让我们来看一下结构体的基础概念:
结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”
,其描述了一块内存区间的大小及解释意义。
定义结构体变量
结构体的样子如下:
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
未完待续!!!
撒花💐!!!