网站后台和移动开发,音乐网站建设流程,seo网站优化服务合同,北京网站优化企业点击蓝字关注我们当前文章介绍动态堆空间内存分配与释放#xff0c;C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点#xff0c;最后通过一个学生管理系统综合练习结构体数组的使用。1. 动态内存管理C语言代码-----编译-----链接------可执行… 点击蓝字关注我们当前文章介绍动态堆空间内存分配与释放C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点最后通过一个学生管理系统综合练习结构体数组的使用。1. 动态内存管理C语言代码-----编译-----链接------可执行的二进制文件(windows下xxx.exe) 二进制文件中的数据是如何摆放的? 文本数据段、静态数据段、全局数据段。堆栈空间: 代码在运行的时候才有的空间。栈空间: 系统负责申请负责释放。比如: 函数形参变量、数组…… 堆空间: 程序员负责申请负责释放。#include stdlib.h //标准库头文件void *malloc(int size); //内存申请。 形参表示申请的空间大小,返回值:申请的空间的地址void free(void *p); //内存释放。 形参就是要释放的空间首地址。动态空间申请示例。动态空间申请#include stdio.h#include string.h#include stdlib.hint main(){int *pmalloc(sizeof(int)); //申请空间if(p!NULL){printf(申请的空间地址: 0x%X\n,p);*p888;printf(%d\n,*p);}free(p); //释放空间return 0;}示例2#include stdio.h#include string.h#include stdlib.hchar *func(void){char*strmalloc(100); //char str[100];if(str!NULL){strcpy(str,1234567890);printf(子函数打印:%s\n,str);//free(str); //释放空间return str;}else{return NULL;}}int main(){char *pfunc();printf(主函数打印:%s\n,p);return 0;}2. 结构体2.1 定义语法结构体的概念: 可存放不同数据类型的集合。比如: 存放一个班级学生的信息。可以使用一个结构体存放一个学生的信息。一个结构体数组存放整个班级的学习信息。数组的概念: 可存放相同数据类型的集合。微信搜索公众号C语言中文社区免费领取精品学习资料。结构体的定义语法://声明一种新类型-----数据类型struct 结构体的名称{结构体的成员1;结构体的成员2;…………}; //最后有分号结束struct MyStruct {char a;int b;float c;char str[100];};2.2 定义示例结构体如何赋值? 如何访问结构体内部成员#include stdio.h#include string.h#include stdlib.h//定义结构体数据类型struct MyStruct{char a;int b;float c;char str[100];};int main(){struct MyStruct data{A,123,456.789,abcd}; //data就是结构体类型的变量//结构体变量访问内部成员的语法: . 点运算符printf(%c\n,data.a);printf(%d\n,data.b);printf(%f\n,data.c);printf(%s\n,data.str);return 0;}2.3 初始化#include stdio.h#include string.h#include stdlib.h//定义结构体数据类型struct MyStruct{char a;int b;float c;char str[100];}data{A,123,456.789,abcd}; //data就是结构体类型的变量int main(){//结构体变量访问内部成员的语法: . 点运算符printf(%c\n,data.a);printf(%d\n,data.b);printf(%f\n,data.c);printf(%s\n,data.str);return 0;}2.4 结构体赋值//结构体变量访问内部成员的语法: . 点运算符#include stdio.h#include string.h#include stdlib.h//定义结构体数据类型struct MyStruct{char a;int b;float c;char str[100];}; int main(){struct MyStruct data;//data就是结构体类型的变量//成员单独赋值data.aA;data.b123;data.c456.789;strcpy(data.str,abcd); //数组赋值//结构体变量访问内部成员的语法: . 点运算符printf(%c\n,data.a);printf(%d\n,data.b);printf(%f\n,data.c);printf(%s\n,data.str);return 0;}2.5 结构体数组结构体赋值分为两种标准: C89 、C99结构体数组#include stdio.h#include string.h#include stdlib.h//定义结构体数据类型struct MyStruct{char a;int b;float c;char str[100];}; int main(){struct MyStruct data[100];//data就是结构体数组类型变量struct MyStruct data2[50];//成员单独赋值data[0].aA;data[0].b123;data[0].c456.789;strcpy(data[0].str,abcd); //数组赋值//结构体变量访问内部成员的语法: . 点运算符printf(%c\n,data[0].a);printf(%d\n,data[0].b);printf(%f\n,data[0].c);printf(%s\n,data[0].str);return 0;}2.6 结构体指针赋值#include stdio.h#include string.h#include stdlib.h//定义结构体数据类型struct MyStruct{char a;int b;float c;char str[100];}; int main(){//struct MyStruct buff[100];//struct MyStruct *databuff; //结构体指针类型变量struct MyStruct *datamalloc(sizeof(struct MyStruct));data-aA;data-b123;data-c456.789;strcpy(data-str,abcd);//结构体指针访问内部成员的变量 通过 - 运算符。 printf(%c\n,data-a);printf(%d\n,data-b);printf(%f\n,data-c);printf(%s\n,data-str);return 0;}3. 学生管理系统作业: 学生管理系统需求: (每一个功能都是使用函数进行封装) 1.实现从键盘上录入学生信息。(姓名、性别、学号、成绩、电话号码) 2.将结构体里的学生信息全部打印出来。3.实现根据学生的姓名或者学号查找学生查找到之后打印出学生的具体信息。4.根据学生的成绩对学生信息进行排序。5.根据学号删除学生信息。示例:#include stdio.h
#include string.h
#include stdlib.h//定义存放学生信息的结构体类型
struct StuDentInfo
{char Name[20]; //姓名int number; //学号char phone[20];//电话号码
}; //全局变量区域
unsigned int StuDentCnt0; //记录已经录入的全部学生数量//函数声明区域
void PrintStuDentInfoList(void);
void InputStuDentInfo(struct StuDentInfo*info);
void FindStuDentInfo(struct StuDentInfo*info);
void SortStuDentInfo(struct StuDentInfo*info);
void PrintStuDentInfo(struct StuDentInfo*info);int main()
{struct StuDentInfo data[100]; //可以100位学生的信息int number;while(1){PrintStuDentInfoList(); //打印功能列表scanf(%d,number);printf(\n);switch(number){case 1:InputStuDentInfo(data);break;case 2:FindStuDentInfo(data);break;case 3:SortStuDentInfo(data);break;case 4:PrintStuDentInfo(data);break;case 5:break;default:printf(选择错误!\n\n);break;}}return 0;
}/*
函数功能: 打印学生管理系统的功能列表
*/
void PrintStuDentInfoList(void)
{printf(\n--------------学生管理系统功能列表----------------\n);printf(1. 录入学生信息\n);printf(2. 根据学号查找学生信息\n);printf(3. 根据学号排序\n);printf(4. 打印所有学生信息\n);printf(5. 删除指定的学生信息\n);printf(请选择功能序号:);
}/*
函数功能: 录入学生信息
*/
void InputStuDentInfo(struct StuDentInfo*info)
{printf(输入学生姓名:);scanf(%s,info[StuDentCnt].Name);printf(输入学号:);scanf(%d,info[StuDentCnt].number);printf(输入电话号码:);scanf(%s,info[StuDentCnt].phone);StuDentCnt; //数量自增
}/*
函数功能: 查找学生信息
*/
void FindStuDentInfo(struct StuDentInfo*info)
{int num,i;printf(输入查找的学号:);scanf(%d,num);for(i0; iStuDentCnt; i){if(info[i].numbernum){printf(信息查找成功该学生的信息如下:\n);printf(姓名:%s\n,info[i].Name);printf(学号:%d\n,info[i].number);printf(电话号码:%s\n,info[i].phone);printf(\n);break;}}if(iStuDentCnt){printf(----------%d学号不存在!---------\n,num);}
}/*
函数功能: 根据学号排序
*/
void SortStuDentInfo(struct StuDentInfo*info)
{int i,j;struct StuDentInfo tmp; //保存临时信息for(i0; iStuDentCnt-1; i){for(j0;jStuDentCnt-i-1;j){if(info[j].numberinfo[j1].number){tmpinfo[j];info[j]info[j1];info[j1]tmp;}}}
}/*
函数功能: 打印所有学生信息
*/
void PrintStuDentInfo(struct StuDentInfo*info)
{int i0;printf(-----------所有学生的信息列表------------\n);for(i0;iStuDentCnt;i){printf(姓名:%s\n,info[i].Name);printf(学号:%d\n,info[i].number);printf(电话号码:%s\n,info[i].phone);printf(\n);}
}*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步