学习日志
姓名:唐小玲 日期: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:%s,sex:%c,age:%d,score:%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:%s,sex:%c,age:%d,score:%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; } |
自我评价 (是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等) |
一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习! |
作业 |
无 |