关于作者:
2019NOIP退役成员,学习c语言已有多年经验,更懂得考试的题目,和初学者学习时所遇到的问题 华为云享专家,以及CSDN的新星创作者,有写博客的一定能力
关于本栏目
本栏目的宗旨是带你入门c语言,作者打算用题海 c语言的概念来完成本栏目,
适用人群:面向广大的编程爱好者和大学生来进行创作 学完本栏后你能达到的水平:计算机二级水平左右,入门c语言学习 题目:主要来源于网络和c语言的入门算法题目
写在前面的话(第十三天)
记住我们的宗旨:努力去做,让一切交给时间来评判!
结构体
今天我们来学习结构体,数组可以定义多个同一个类型的变量,结构体可以定义多个不同类型的变量,定义结构体我们要使用struct语句格式如下:
代码语言:javascript复制struct tag {
member-list
member-list
member-list
...
} variable-list ;
tag 是结构体标签。
member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
例如我们定义一个学生结构:
代码语言:javascript复制struct Student
{
int age;
char name[20];
}S1;
访问结构成员
为了访问结构的成员,我们使用成员访问运算符(.)下面我们来使用一下,上面定义的结构体struct
代码语言:javascript复制#include<stdio.h>
struct Student
{
char name[20];
int age;
};
int main()
{
Student s1;
scanf("%dn", &s1.age);
scanf("%s", &s1.name);
printf("%d", s1.age);
printf("%s", s1.name);
return 0;
}
定义结构体数组
可以和基本数据类型一样,定义数组,表示并排的多个对象
代码语言:javascript复制Student s[3];
//或者在定义的时候就初始化
Student s[3] =
{
{"YMM",1},
{"gg",2},
{"nn",3}
}
同样数组的元素类型是结构体,所以也可以用【】来获取元素,然后用点号来访问元素
代码语言:javascript复制for(int i = 0 ; i<3;i )
{
printf("name:%s age:%d",
s[i].name,
s[i].age);
}
结构体与指针
结构体类后加上*就表示相应的指针类型 Student *s = &a; 对于指针指向的对象,可以用->操作符来访问对象的成员 s->name = “Ymm”; 当然也可以写成 ( *s).name这种格式但是我们一般不推荐这样写
结构体与函数
俩个内容: 1.作为函数的参数 2.作为函数的返回值
代码语言:javascript复制void test(Student a)
{
printf("name:%s,age:%d",a.name,a.age);
}
void test01(Student *a)//传入地址
{
printf("name:%s,age:%d",a->name,a->age);
}
当作为函数返回值时候:
代码语言:javascript复制Student create(int age)
{
Student a;
a.age = age;
return a;//直接return
};
结构体作为结构体的成员
代码语言:javascript复制struct Color
{
char r;
char g;
char b;
}
struct Object
{
int x,y;
Color rgb;//在创建一个Color类型
}
像这样来访问成员:
代码语言:javascript复制Object obj=
{
1,
2,
{1,2,3}//rgb
}
printf("obj:(%d,%d)color:n",
obj.x,obj.y,
obj.rgb.r,
obj.rgb.g,
obj.rgb.b
);
用俩个点号来进行访问
作业
用结构体来创建一个手机类,要包含3种手机,和他们的厂商,年份,参考价格三个条件