【数据结构(郝斌)】02预备知识-结构体

一、为什么会出现结构体

为了表示一些复杂的数据,而普通的基本类型变量无法满足要求。

例如描述一个班级的学生信息(学号、姓名、年级、性别。。。),单纯的基本数据类型变量很容易将张三的姓名匹配到李四的学号,不易区分。故使用结构体可满足。

二、结构体定义

类里面有属性和方法,结构体里只有属性。
用户根据实际需要自己定义的复合数据类型

三、使用1—普通结构体变量

1、定义结构体变量


//结构体
struct Student {
	int sid;
	char name[200];
	int age;
};

2、创建结构体变量

数据类型(struct) 结构体名 变量名={赋值}


	//创建结构体变量:数据类型 结构体名 变量名={赋值}
	struct Student st ={1001,"aa",21};

3、访问结构体成员

结构体变量名.成员名

	//访问结构体成员:结构体变量名.成员名
	printf("%d	%s	%d\n",st.sid,st.name,st.age);

完整代码:


//结构体
struct Student {
	int sid;
	char name[200];
	int age;
};
int main (void)
{
	//定义结构体变量:数据类型 结构体名 变量名={赋值}
	struct Student st ={1001,"aa",21};
	//访问结构体成员:结构体变量名.成员名
	printf("%d	%s	%d\n",st.sid,st.name,st.age);
	return 0;
}

在这里插入图片描述

四、使用2—指针结构体变量

1、创建结构体变量

//指针结构体变量
	struct Student *pst;

2、赋值

	//赋值:pst指向st
	pst=&st;

3、访问

结构体指针变量名->结构体成员名

	//访问:pst->sid==>(*pst).sid==>st.sid
	printf("sid=%d\n",pst->sid);
	printf("sid=%d\n",(*pst).sid);
	printf("sid=%d\n",st.sid);
//结构体
struct Student {
	int sid;
	char name[200];
	int age;
};
int main (void)
{
	//定义结构体变量:数据类型 结构体名 变量名={赋值}
	struct Student st ={1001,"aa",21};
	//访问结构体成员:结构体变量名.成员名
	//printf("%d	%s	%d\n",st.sid,st.name,st.age);
	//指针结构体变量
	struct Student *pst;
	//赋值:pst指向st
	pst=&st;
	//访问:pst->sid==>(*pst).sid==>st.sid
	printf("sid=%d\n",pst->sid);
	printf("sid=%d\n",(*pst).sid);
	printf("sid=%d\n",st.sid);	
	return 0;
}

在这里插入图片描述

五、注意事项

  • 结构体变量不能加减乘除,但可以相互赋值(st1=st2)

六、通过函数修改结构体变量的值

使用普通变量当参数时,占内存、耗时间,
参数为地址,不占用内存。

//结构体
struct Student {
	int sid;
	char name[200];
	int age;
};
void fpst(struct Student *pst)
{
	(*pst).age=22;
	pst->sid=1002;
	strcpy(pst->name,"xiaowang");
	
}
int main (void)
{
	//定义结构体变量:数据类型 结构体名 变量名={赋值}
	struct Student st ={1001,"aa",21};
	//传参变量地址
	fpst(&st);
	//访问结构体成员:结构体变量名.成员名
	printf("%d	%s	%d\n",st.sid,st.name,st.age);	
	return 0;
}

在这里插入图片描述

七、malloc动态创建、打印

#include <stdio.h>

struct Student {
	int sid;
	int age;
};
struct Student * CreateStudent(void);
void ShowStudent(struct Student *ps);
int main(void)
{
	struct Student *ps;//定义一个指针变量
	ps =CreateStudent();
	ShowStudent(ps);
}

/*
	
创建链表
*/
struct Student * CreateStudent(void)
{
	struct Student *p=(struct Student *)malloc(sizeof(struct Student));
	p->sid=14;
	p->age=22;
	return p;
}

//遍历链表
void ShowStudent(struct Student *pst)
{
	printf("%d %d",pst->sid,pst->age);
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值