实训第五天-------结构体、共用体

今日学习任务 结构体,结构体与链表,内存管理,公共体
今日任务完成情况 按时完成了任务,写了一个相对比较大的程序,能跟的上思路
今日开发中出现的问题汇总 头文件的添加
今日未解决问题
今日开发收获
  1. 结构体

  1. 声明结构体类型格式:struct 结构体名 {成员表列}

  2. 结构体长度计算

  1. 结构体在内存里面是连续存储的

  2. 字节对齐

  3. 结构体总长度一定是最长成员的整数倍【double除外6】

  4. 每个成员的偏移量一定是该成员长度的整数倍【偏移量:距离结构体开始位置的长度】

    3.

  1. 结构体和链表

  1. 结构体数组    顺序结构(连续)

  2. 建立链表(不连续)

    struct student

    {

      char name[20];

      int age;//数据域

      struct student *next;//指针域

    }

  1. 内存管理

  1. 虚拟内存均为4GB

    内核态(1G

    用户态(3G):【1】数据段(全局变量,static静态变量)静态数据区

                 2】代码段(代码,常量)

                 3】栈空间(局部变量,形参)

                 4】堆空间(malloc

    栈空间和堆空间的区别:

    栈空间是操作系统管理的,由操作系统分配,由操作系统释放;

    堆空间是用户管理的,申请和释放都由用户完成(malloc  calloc)  

  1. union ,enum, typedef

  1. 定义共用体类型变量的一般形式

    union //为最长成员分配空间,所有成员共享同一段空间

  2. 字节序

    大端:高字节存放在低地址,低字节存放在高地址

    小端:高字节存放在高地址,低字节存放在低地址

    #include <stdio.h>

    union test

    {

    short val;

    char a[2];

    };

     

    int main()

    {

    union test t;

    t.val=0x0102;

    if(t.a[0]==1&&t.a[1]==2)

    {

    printf("大端字节序\n");

    }

    else

    {

    printf("小端字节序\n");

    }

    while (1);

    return 0;

    }

     

自我评价 今天听得挺多的感觉会了不少,同时今天同老师一起编写了一个程序,把之前课设的又做了一遍

其他

#ifndef _STUDENT_H
#define _STUDENT_H
#define size 10
struct student
{
int id;

char name[20];
int age;
char sex;
int num;
};
int i;//数组下标
typedef struct student stu;

#endif



源文件

#include<stdio.h>
#include<stdlib.h>
#include"student.h"


void menu()
{
printf("****************************\n");
printf("1、输入信息      2、显示信息\n");
printf("3、删除信息      4、修改信息\n");
printf("****************************\n");
}


void AddInfo(stu s[])
{
printf("请输入姓名、年龄、性别、学号:\n");
scanf("%s%d %c %d", s[i].name, &s[i].age, &s[i].sex, &s[i].num);
s[i].id=i+1;
i++;
}
void showinfo(stu s[])
{
int j;
for(j=0;j<i;j++)
{
printf("学生%d信息:\n",s[j].id);
printf("姓名:%s年龄:%d性别:%c学号:%d\n",s[j].name,s[j].age,s[j].sex,s[j].num);
}
}
void deleteinfo(stu *s)
{
int id,j;
printf("输入删除的学生序号");
scanf("%d\n",&id);
for(j=0;j<i-id;j++)
{
s[id+j-1]=s[id+j];
s[id+j-1].id=id+j;


}
i--;


}
void changeinfo(stu *s)
{
int id;


printf("输入修改学生的序号");


scanf("%d",&id);
printf("修改的后的姓名,年龄 性别 学号");
scanf("%s%d%s%d",s[id-1].name, &s[id-1].age, &s[id-1].sex, &s[id-1].num);




}


int main()
{
char choice[10] = {0};
stu student[size] = {0};
while(1)
{
menu();


scanf("%s", choice);


switch(atoi(&choice[0]))
{
case 1:
AddInfo(student);
 break;
case 2:
showinfo(student);
break;
case 3:
deleteinfo(student);
break;
case 4:
changeinfo(student);
break;


}
}
return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_42653222/article/details/81038212