2022-2023-1 20221307《计算机基础和程序设计》第十四周学习总结
这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14
作业目标 学习《C语言程序设计》第12章
链接:2022-2023-1 20221307《计算机基础和程序设计》第十四周学习总结 - 20221307 - 博客园 (cnblogs.com)
教材内容总结
:1.学习了结构体
2.学习了文件操作
一、结构体
结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员的数据所组成,其中每个成员可以是不同类型的。结构体通常用来表示类型不同但是又相关的若干数据。(注意:数组与结构体一样,也是一种值的集合,只不过数组的每个元素都要是相同类型的,而结构体的每个成员可以是不同类型的)
如何定义一个结构体:
#include<stdio.h> struct STU { };
注意:
1.若结构体声明是在mian函数之外的,那么列表后创建的结构体变量是一个全局变量。
2.结构体成员变量也可以是另一个结构体类型,这种用法被称为:嵌套结构体。
3.在结构体声明结束的时候,千万不要忘记{}
后面是有一个;
的。
嵌套结构体:
#include<stdio.h> struct DATE{ int year; int date; int month; }; struct GRADES{ int math; int English; }; typedef struct STUDENT{ char name; struct DATE; int num; struct GRADES; }stu;
结构体自引用,链表:
数据在内存中有连续和非连续的储存方式例如我们熟知的字符串,数组
#include<stdio.h> #define N 100 main(void) { char str[N];//both succession int arr[N]; }
而链表在数据结构中储存的方式并不是连续的
创建一个结构体,成员包含指向自身的指针
#include<stdio.h> struct STU{ int data; struct STU* next; };
结构体内存对齐
下面代码打印出所占字节数,经过计算应该是6字节,但事实真的是这样吗?
#include<stdio.h> struct s1{ int a; char b; char c; }; struct s2{ int a; char b; char c; }; main() { printf("%d",sizeof(struct s1)); printf("%d",sizeof(struct s2)); }
运行结果
第一个成员变量的地址与结构体起始位置的地址是相同的
其他成员变量要对齐到<对齐数>的整数倍处
结构体的总大小为最大对齐数(每个成员的都有一个对齐数)的整数倍
如果是嵌套结构体的情况,嵌套结构体的对齐数就是其自身的最大对齐数。(同理数组的对齐数就是其元素的对齐数)
结构体传参:
看下面这段代码
1 #include<stdio.h> 2 #define N 100 3 struct stu{ 4 int year; 5 int data[N]; 6 }; 7 void print1(struct stu s) 8 { 9 printf("%d\n",stu.year); 10 } 11 void print2(struct stu* ps) 12 { 13 printf("%d\n",stu->year); 14 } 15 main(void) 16 { 17 struct stu s={{1,2,3,4,5},100}; 18 print1(s); 19 print2(&s); 20 }
13 行引用地址利用“->”运算符
二、文件操作
fopen 函数原型
应包含(“文件名”,“所包含操作”)
下面代码
#include<stdio.h> int main(void) { FILE *fp=fopen("test.txt","r");//read if(fp=NULL) { perror("fopen");//print the error informain return -1;//code error to exit } fclose(fp);//close file return 0; }
还有很多操作函数不一一列出;