结构体

一 赋值和初始化

# 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个字节 因为指针值传递第一个变量的地址

结构体变量的运算
结构体变量不能相加减乘除但可以互相赋值

实例:学生成绩信息管理系统

posted @ 2019-12-01 11:49  panghushalu  阅读(113)  评论(0编辑  收藏  举报