C语言---结构体-----重点

一  为什么需要结构体

   为了表示一些复杂的事物,而普通的基本类型无法满足实际要求。

二 、什么叫结构体?

   把一些基本类型数据组合在一起形成一个新的复合数据类型,这个叫结构体

三、如何定义结构体?(3种方式)

//方式一  :只定义一个新数据类型,未定义变量
struct Student
{
	int age;
	float score;
	char sex;

};

//方式二
struct Student2 
{
	int age;
	float score;
	char sex;

} st2 ;

//st2是结构体struct Student2 创建出的一个结构体变量
//方式三
struct 
{
	int age;
	float score;
	char sex;

} st3

四、如何使用结构体变量?

   1.  赋值和初始化

         定义的同时可以整体赋值

         如果定义完后,则只能单个的赋初始值

# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int hight;

};
struct St
{
	struct Peo p;  //结构体中包含结构体变量
	int num;
	float f;

};

int main()
{
	struct Peo p1 = { "张三","15262623202","男",175 }; //结构体初始化
	struct St s = { {"李四","15262623202","男",175},100,3.14f };
	printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.hight, s.num, s.f);
	return 0;
}

   2.如何取出结构体变量中的每一个成员

       ①  结构体变量名.成员名

       ②  指针变量名—>成员名

  举例子:

  

int main(void)
{
    struct Student st = { 80,66.6,'F' }; //初始化,定义的同时赋初始值
    struct Student* pst=&st; //
    pst->age = 88; //第二种方式, pst->age 在计算机内部会被转化成(*pst).age,也就是等价于 st.age
    st.age = 10; //第一种方式

    struct Student st2;
    st2.age = 10;
    st2.score = 88;
    st2.sex = 'F';
    printf("%d %f %c", st.age, st.score, st.sex);
     printf("%d %f %c", pst->age, pst->score, pst->sex);
    return 0;
}
# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int hight;

};
struct St
{
	struct Peo p;
	int num;
	float f;

};
void print2(struct Peo* sp)
{
	printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->hight);//指针变量名—>成员名
}

void print1(struct Peo p)
{
	printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.hight);//结构体变量.成员变量
}



int main()
{
	struct Peo p1 = { "张三","15262623202","男",175 }; //结构体初始化
	struct St s = { {"李四","15262623202","男",175},100,3.14f };
	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.hight);
	printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.hight, s.num, s.f);

	print1(p1);  //传结构体
	print2(&p1); //传地址
	return 0;
}

3. 结构体变量和结构体变量地址作为函数参数传递的问题

    推荐使用结构体变量地址作为函数参数来传递

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
/*
2024年5月14日10:33:03
通过函数完成对结构体变量的输入和输出
*/
struct Student
{
	int age;
	char sex;
	char name[100];

};
void InputStudent(struct Student* pstu); //函数声明
void OutputStudent(struct Student* ss); //函数声明

int main(void)
{
	struct Student st;
	InputStudent(&st);
	printf("%d %c %s\n", st.age, st.sex, st.name);
	OutputStudent(&st);

	return 0;
}
void InputStudent(struct Student *pstu)
{
	(*pstu).age = 10;
	strcpy(pstu->name, "张三");
	pstu->sex = 'F';

}
void OutputStudent(struct Student *ss)
{
	
	printf("%d %c %s\n", ss->age, ss->sex, ss->name);
}

4.结构体变量的运算

  结构体不能进行加减乘除,但是结构体变量可以相互赋值

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值