C语言——结构体
目录
一,什么是结构体
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。把一些基本数据类型组合到一起形成的一个新的复合数据类型,结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以做成你想要的数据类型,以方便日后的使用。
什么时候我们需要使用结构体呢
在实际问题中有时候我们需要几种数据类型一起来修饰某个变量。例如一个学生的信息就需要成绩(浮点型),性别(字符),年龄(整形)等等。这些数据类型都不同但是他们又是表示一个整体,要存在联系,那么我们就需要一个新的数据类型。
#include<stdio.h>
int main (void)
{
int age;
float score;
char sex;
int age2;
float score2;
char sex2;
return 0;
}
上方程序定义了两个学生的成绩,年龄,性别,但我们所希望的是有一个变量可以同时储存一个学生的成绩,年龄,性别(均为基本类型变量),因为当同时定义多个学生的上方信息时,由于它并不是一个有机整体,可能会导致输入信息的错乱(例如:同学1的年龄可能会和同学2的成绩可能会放入同一个整体),为了表示一些复杂数据,而基本类型变量无法满足我们的需求,这时就需要定义一个结构体。
二,如何定义结构体
定义结构体相当于定一个一个新的数据类型,而不是在定义变量。
第一种方式(推荐):
struct student
{
int age;
float score;
char sex;
};
第二种方式:
在定义结构体数据类型的同时,定义变量名,但这个只能定义一次,第二次想使用结构体时就会出问题。
struct student
{
int age;
float score;
char sex;
}st;
第三种方式:
这种方式也可以定义结构体,但是未说明数据类型名,后续使用会不方便。
struct
{
int age;
float score;
char sex;
}st;
如上我们使用第一种方式定义了一个struct student数据类型,他其中就包括一个学生的成绩,年龄,性别这三个基本变量,在主函数中,我们就可以使用这个结构体数据类型来定义变量。
末尾分号不要省!!!
三,如何使用结构体变量
在学会定义结构体变量后,就要懂得如何让使用结构体变量,下面从四个方面来介绍如何使用结构体变量:
1.结构体变量的赋值和初始化
1)定义的同时赋初值
struct student st={18,66.6,'F'};
2)先定义变量,再对变量中的元素一一赋值
struct student st2;
st2.age =10;
st2.score =88;
st2.sex ='F';
2.如何取出结构体变量中的每一个成员
在定义完结构体变量后编译后才可以使用结构体变量中的成员
1)结构体变量名.成员名
2)指针变量名->成员名
使用第二种方式,必须定义一个指针变量
struct student *pst = &st;//pst只能存放struct student结构体变量的地址
pst->age在计算机内部会被转化成(*pst).age,所以pst->age等价于(*pst).age
pst->age的含义是:pst所指向的结构体变量中的age这个成员
3.通过函数对结构体变量进行输入和输出
我们用一个程序来认识这个知识点吧
#include <stdio.h>
#include <string.h>
void Inputstudent(struct student *pstu);
void Outputstudent(struct student ss);
struct student
{
int age;
char sex;
char name[100];
};//分号不可省
int main (void)
{
struct student st;
Inputstudent(&st);//对结构体变量输入 必须发送st地址,要修改储存在st变量地址中的值
//printf ("%d\n",sizeof(st));
//printf ("%d %c %s",st.age ,st.sex ,st.name );
Outputstudent(st);//对结构体变量输出 可以发送st的地址,也可以直接发送st的内容 只输出不修改
//为了减少内存消耗,也为了提高执行速度,建议发送地址
return 0;
}
void Outputstudent(struct student ss)
{
printf ("%d %c %s",ss.age ,ss.sex ,ss.name );
}
void Inputstudent(struct student *pstu)
{
(*pstu).age =10;
strcpy(pstu->name ,"张三");
pstu->sex ='F';
}
在编写 Inputstudent ()函数时,要想在函数内部修改 st 变量的值,需要发送 st 变量的地址,才可以完成对 st 变量值的修改,例如下方 Inputstudent()函数,就不可以改变 st 变量的值
void Inputstudent(struct student stu)
{
stu.age =10;
strcpy (stu.name ,"张三");//不能写成 stu.name='张三';(字符串处理)
stu.sex ='F';
}
4.结构体变量的运算
结构体变量不能想加,不能相减,也不能相互乘除,但是结构体变量可以相互赋值