c语言从0->1入门——结构体

2022-12-13 14:37:29 浏览数 (1)

关于作者:

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种手机,和他们的厂商,年份,参考价格三个条件

0 人点赞