------------------------------------------------------------------
# include <stdio.h>
struct Student{ //Student可以看成一种数据类型
int age;
float score;
char sex;
};
int main(void){
struct Student st = {80,66.6,'F'};
return 0;
}
------------------------------------------------------------------
一、为什么需要结构体?
为了表示一些复杂的事物,而普通类型无法满足实际需求
二、什么叫结构体?
把一些基本类型组合在一起形成的一个新的复合数据类型叫做结构体。
三、如何定义一个结构体?
第一种方式
struct Student{
int age;
float score;
char sex;
};
第二种方式
struct Student2{
int age;
float score;
char sex;
} str2;
第三种方式
strut {
int age;
float score;
char sex;
} str3;
四、怎么去使用结构体变量
1.赋值和初始化
定义的同时可以整体赋初值
如果定义完后,则只能单个的赋初值
--------------------------------------------------------------------
# include <stdio.h>
struct Student
{
int age;
float score;
char sex;
}
int main(void){
struct Student st = {80, 66.6, 'F'}; //整体赋值
struct Student st2; //单个赋值
st2.age = 10;
st2.score = 88;
st2.sex = 'F';
printf("%d %f %c\n", st.age, st.score, st.sex); //第一种取值方式
printf("%d %f %c\n", st2.age, st2.score, st2.sex);
return 0;
}
--------------------------------------------------------------------
2.如何取出结构体变量中的每一个成员
1.结构体变量名.成员名
2.指针变量->成员名
-------------------------------------------------------------------------
# include <stdio.h>
struct Student
{
int age;
float score;
char sex;
};
int main(void){
struct Student st = {40, 60, 'F'};
struct Student * pst = &st;
pst->age = 68;
st.score = 66;
printf("%d %f\n", st.age, pst->score);
return 0;
}
-------------------------------------------------------------------------
pst->age在计算机内部会被转化成(*pst).age
3.结构体变量的运算
结构体变量不能相加,不能相减,也不能相互乘除但结构体变量可以相互赋值
--------------------------------------------------------------------------
struct Student
{
int age;
char sex;
char name[100];
}; //分号不能省略
struct Student st1, st2;
st1+st2 st1*st2 st1/st2 都是错误的
st1 = st2 或者 st2 = st1 都是正确的
---------------------------------------------------------------------------
4.结构体变量和结构变量指针作为函数参数传递的问题
推荐使用结构体指针变量作为函数参数来传递
-------------------------------------------------------------------------
# include <stdio.h>
struct Student
{
int age;
float score;
char sex;
};
int main(void){
struct Student st;
InputStudent(&st); //对结构体变量输入
OutputStudent(&st); //对结构体变量输出
return 0;
}
void OutputStream(struct Student * ss){
printf("%d %c %s\n", ss->age, ss->sex, ss->name);
}
void InputStudent(struct Student * pstu){ //pstu只占4个字节
(*pstu).age = 10;
strcpy(pstu->name, "zhangsan");
pstu->sex = 'F';
}
---------------------------------------------------------------------------
5.动态的构造存放学生信息的结构体数组
---------------------------------------------------------------------------
/*
2012年2月5日19:43:24
*/
# include <stdio.h>
# include <malloc.h>
struct Student
{
int age;
float score;
char name[100];
};
int main(void){
int len;
struct Student * pArr;
int i;
printf("请输入学生的个数:\n");
printf("len = ");
scanf("%d", &len);
pArr = (struct Student *)malloc(len * sizeof(struct Student));
for (i=0; i<len; ++i){
printf("请输入第%d个学生的信息\n", i+1);
printf("age = ");
scanf("%d", &pArr[i].age);
printf("name =");
scanf("%s", pArr[i].name);
printf("score = ");
scanf("%f", &pArr[i].score);
}
//输出
printf("\n\n\n");
for (i=0; i<len; ++i){
printf("第%d个学生的信息是\n", i+1);
printf("age = %d\n", pArr[i].age);
printf("name = %s\n", pArr[i].name);
printf("score = %f\n\n", pArr[i].score);
}
return 0;
}
输出结果:
请输入学生的个数:
len = 3
请输入第1个学生的信息
age = 22
name =李小强
score = 99
请输入第2个学生的信息
age = 23
name =杨鹏
score = 89
请输入第3个学生的信息
age = 24
name =王海涛
score = 88
第1个学生的信息是
age = 22
name = 李小强
score = 99.000000
第2个学生的信息是
age = 23
name = 杨鹏
score = 89.000000
第3个学生的信息是
age = 24
name = 王海涛
score = 88.000000
---------------------------------------------------------------------------
链表
相关文章
- 07-28【C语言进阶学习笔记】三、字符串函数+内存函数详解(2)
- 07-28C语言学习笔记-2021-03-22
- 07-28c 语言结构体struct的三种定义方式 及 typedef
- 07-28数据结构学习——顺序栈和链式栈的简单实现和解析(C语言版)
- 07-28C语言学习笔记—P16(结构体+图解+题例)
- 07-28【C语言】结构体数组:计算学生总成绩及计算高分学生信息
- 07-28[Objective-C语言教程]决策结构(10)
- 07-28【学习笔记】队列、单调队列、循环队列,你了解多少?(C语言实现)
- 07-28c语言的科学与艺术 学习笔记--第5章习题 打印1900年以前的日历
- 07-282021/5/12 c语言---结构体