结构体
一 赋值和初始化
# include <stdio.h>
struct Student//只是定义了一个数据类型,并没有定义变量
{
int age;
float score;
char sex;
} ;
int main ()
{
//类似于数组
struct Student st1={80,66.6,'F'};//初始化 定义的同时赋初值
struct Student st2;//如果定义完之后只能分开赋值
st2.age=10;
st2.score=88;
st2.sex='F';
printf("%d %f %c\n",st1.age,st1.score,st1.sex);
printf("%d %f %c\n",st2.age,st2.score,st2.sex);
return 0;
}
二 如何取出结构体变量中的每一个成员
1.结构体变量名.成员名
2.指针变量->成员名 这种方式更常用
# include <stdio.h>
struct Student
{
int age;
float score;
char sex;
} ;
int main ()
{
struct Student st1={80,66.6,'F'};
st1.age;//第一种方式
struct Student* p = &st1;//构造指针变量
p->age;//第二种方式 p->age在计算机内部会转换为(*p).age硬性规定 又等价于st1.age
return 0;
}
三 结构体变量和结构体指针变量作为函数参数传递的问题
# include <stdio.h>
void InputStudent(struct Student* p);
void OutputStudent(struct Student ss);
struct Student
{
int age;
float score;
char sex;
char name[100];
} ;
int main ()
{
struct Student st1;
InputStudent(&st1);
OutputStudent(st1);
return 0;
}
void OutputStudent(struct Student ss)//只输出不修改的话不用使用指针变量
{
printf("%d %f %c %s\n",ss.age,ss.score,ss.sex,ss.name);
}
void InputStudent(struct Student* p)
{
p->age=10;
p->score=99.99;
p->sex='F';
p->name="张三";
}
对上面 void OutputStudent(struct Student ss)//只输出不修改的话不用使用指针变量 做一些注释:
用指针的优点是 可以快速地传递数据 占用的内存小 执行速度快
就拿这个做例子 如果不用指针想要传递到函数中要传递4+4+1+100个字节 而用指针只需要传递4+4+4+4个字节 因为指针值传递第一个变量的地址
结构体变量的运算
结构体变量不能相加减乘除但可以互相赋值
实例:学生成绩信息管理系统