Linux下使用C语言编写学生管理系统(完)
写的较多,除了整体代码之外,用到什么也会记录下来(看完感觉有用的话给俺评论一下有用,有大佬看的话可以给点建议)
一.设计目的:复习C语言,并且在Linux中使用vim编写学生管理系统,学习使用Makefile将多个文件链接起来。
二.各个模块功能以及实现
1.定义结构体以及结构体的初始化
结构体以及记录过了。学生有以下几个基本信息:姓名、年龄、学号、性别。
重点1:内存问题
tips:结构体的成员在内存中的布局是有内存对齐的。内存对齐是为了优化内存访问的效率和硬件对齐要求而进行的一种处理方式。
请看VCR:
typedef struct{
int age;
char name[50];
int id;
char sex[10];
}student;
当这样定义时,我用sizeof()打印出来的内存大小是72字节
typedef struct{
int age;
int id;
char name[50];
char sex[10];
}student;
当这样定义时,我用sizeof()打印出来的内存大小是68个字节
这两个结构体定义内容是相同的,都是定义了
int age;int id;char name[50]; char sex[10];
但是他们所占用的大小就是不一样。想深入去了解一下的同学可以自己去搜一下关于内存对齐方面的知识。
所以我们在定义结构体的时候,切记把相同类型的变量定义在一块,这样做可以减少对内存的占用,也就是说可以减少浪费空间。
重点2:结构体初始化值问题
就用我们这个学生管理系统举例吧,你在写完结构体的初始化之后,哪怕在代码写完之后,结构体里面的所有值也是通过运行程序的时候在对每一个值进行修改的。但是这些值最开始你是不知道的,也就是野值,这些值是有可能会导致程序出现问题的,我大一写这个代码的时候也没有进行初始化,虽然代码运行起来没有出问题吧,但是现在看起来这样并不好
请看VCR:
#include <stdio.h>
#define MAX 20
typedef struct{
int age;
int id;
char name[50];
char sex[10];
}student;
int main()
{
student A[MAX]; //定义一个结构体数组
for(int i=0;i<MAX;i++)
{
printf("A[%d].age:%d A[%d].id:%d\n", i, A[i].age, i, A[i].id); //用.操作符去访问结构体成员
}
return 0;