苏嵌学习日志5

学习日志

姓名:唐小玲 日期:2018.7.13

 

 

今日学习任务

 

1. 结构体声明及初始化

2. 结构体数组

3. 链表

4. 物理内存与虚拟内存

5. 共用体

6. 字节序

 

今日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

1. 结构体声明及初始化

2. 结构体数组的使用

3. 链表是表示方式

4. 物理内存与虚拟内存的区别

5. 共用体的声明及初始化

6. 大端和小端两种字节序

7. 基本的学生管理系统代码编写

 

今日开发中出现的问题汇总

 

个人结构体及数组这一部分知识点理解起来比较困难,掌握程度不够,编写程序的时候有很多问题,需要重新多加练习编写代码。

 

今日未解决问题

 

依旧不会独立编写难度稍高的代码。

 

 

今日开发收获

 

1.声明一个结构体类型的一般形式

struct 结构体名 {成员列表}

如:struct student //struct关键字,student结构体名,struct student可理解为一种数据类型

{

int num;

char name[20];

int age;

};

2.结构体声明及初始化

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

 

struct student //声明不是定义

{

char name[20]; //不能初始化

char sex;

int age;

int score;

};

 

int main()

{

#if 0

struct student a1 = {"jsetc", 'm', 23 ,90}; //struct student就是一种数据类型,定义结构体变量并初始化

#endif

struct student a1;

strcpy(a1.name,"jsetc");

a1.sex = 'm';

a1.age = 23;

a1.score = 100; //结构体成员引用

printf("name:%ssex:%cage:%dscore:%d\n", a1.name, a1.sex, a1.age, a1.score);

s2 = (struct student *)malloc(sizeof(struct student)); //分配合法内存,否则s2会变成野指针

struct student *s2; //结构体指针

strcpy(s2->name,"jsetc");

s2->sex = 'm';

s2->age = 23;

s2->score = 100;

printf("name:%ssex:%cage:%dscore:%d\n", a1->name, a1->sex, a1->age, a1->score); //结构体指针变量的引用

while(1);

return 0;

}

3.判断结构体占用字节数

#include<stdio.h>

 

struct test

{

short a

char b;

char c;

short d

int f;

}; //12字节   

 

int main()

{

printf("%d\n",sizeof(struct test));

return int printf(const char *_Format,...);

}

/*结构体总长度一定是最长成员的整数倍(double除外)

  每个成员的偏移量一定是该成员长度的整数倍

  偏移量:距离结构体开始位置的长度

  结构体在内存里一定是连续存储的

*/

4.结构体数组(学生管理系统)

(1)头文件student.h

#ifndef _STUDENT_H

#define _STUDENT_H//防止头文件重复包含

 

#define SIZE 10 //数组大小10

 

struct student

{

char name[20];

int age;

char sex;

int number;

};

int i; //数组下标

 

typedef struct student stu; //重新定义数据类型,stu代表struct student类型

(2) student.c

#include<stdio.h>

#include<stdlib.h>

#include<string.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].number);

//printf("%s, %d, %c, %d\n", s[i].name, s[i].age, s[i].sex, s[i].number);

i++;

}

 

void ShowInfo(stu s[])

{

int j;

for(j = 0; j < i; j++)

{

printf("学生%d信息:\n", j + 1);

printf("姓名:%s 年龄:%d 性别:%c 学号:%d\n", s[j].name, s[j].age, s[j].sex, s[j].number);

}

}

 

void DelInfo(stu *s)

{

int id, j;

printf("请输入删除学生的编号:\n");

scanf("%d", &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("请输入修改学生的编号:\n");

scanf("%d", &id);

printf("输入新的信息:\n");

scanf("%s%d %c %d",s[id-1].name, &s[id-1].age, &s[id-1].sex, &s[id-1].number);

}

 

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:

DelInfo(student);

break;

case 4:

ChangeInfo(student);

break;

}

}

return 0;

}

5.链表

6.物理内存与虚拟内存

7.堆空间和栈空间的区别

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

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

8.共用体

  使几个不同的变量共占同一段空间。

#include<stdio.h>

 

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

{

char c;

int a;

int b;

};

int main()

{

//printf("%d\n", sizeof(union test));

union test t;

t.a = 100;

printf("%d\n", t.b);

while(1);

return 0

}

9.字节序

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

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

判断字节序程序如下:

#include<stdio.h>

 

union test

{

short val;

char a[2]; //a[0]低地址,a[1]高地址

};

 

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

}

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习!

 

 

作业

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81036544
今日推荐