当前位置: 首页 > news >正文

做的好的微信商城网站能上外国网站dns

做的好的微信商城网站,能上外国网站dns,漳州招商局规划建设局网站,网站怎么做图片栏目目录 一#xff0c;动态内存函数的介绍 1.1 malloc和free 1.2 calloc 1.3 realloc 1.4C/C程序的内存开辟 二#xff0c;通讯录管理系统 动态内存函数的介绍 malloc free calloc realloc 一#xff0c;动态内存函数的介绍 1.1 malloc和free void* malloc (…目录 一动态内存函数的介绍 1.1 malloc和free 1.2 calloc 1.3 realloc 1.4C/C程序的内存开辟 二通讯录管理系统 动态内存函数的介绍 malloc free calloc realloc 一动态内存函数的介绍 1.1 malloc和free void* malloc ( size_t size ); 这个函数向内存申请一块连续可用的空间并返回指向这块空间的指针。 如果开辟成功则返回一个指向开辟好空间的指针。 如果开辟失败则返回一个NULL 指针因此 malloc的返回值一定要做检查。 返回值的类型是 void* 所以 malloc函数并不知道开辟空间的类型具体在使用的时候使用者自己来决定。 如果参数 size 为 0 malloc的行为是标准是未定义的取决于编译器。 void free ( void* ptr ); free 函数用来释放动态开辟的内存。 如果参数 ptr 指向的空间不是动态开辟的那 free 函数的行为是未定义的。 如果参数 ptr 是 NULL 指针则函数什么事都不做。 可以看到free之后将向内存申请的空间给释放了当然不要忘了将他设置为NULL防止野指针的使用当然如果不释放的话会出现内存泄漏的问题我们的电脑把程序关了就退出了我们申请的空间也就被释放的但是有些服务器是一直不关的那如果在使用时一直内存泄漏会出现问题的。 1.2 calloc void* calloc ( size_t num , size_t size ); 函数的功能是为 num 个大小为 size 的元素开辟一块空间并且把空间的每个字节初始化为 0 。 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全 0 。 例如 1.3 realloc realloc 函数的出现让动态内存管理更加灵活。 有时会我们发现过去申请的空间太小了有时候我们又会觉得申请的空间过大了那为了合理的时候内存我们一定会对内存的大小做灵活的调整。那 realloc 函数就可以做到对动态开辟内存大小的调整。 void* realloc ( void* ptr , size_t size ); ptr 是要调整的内存地址 size 调整之后新大小 返回值为调整之后的内存起始位置。 这个函数调整原内存空间大小的基础上还会将原来内存中的数据移动到 新 的空间。 realloc 在调整内存空间的是存在两种情况 情况 1 原有空间之后有足够大的空间 情况 2 原有空间之后没有足够大的空间 情况 1 当是情况 1 的时候要扩展内存就直接原有内存之后直接追加空间原来空间的数据不发生变化。 情况 2 当是情况 2 的时候原有空间之后没有足够多的空间时扩展的方法是在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 将刚刚malloc的空间扩大了2呗当然指针在给p1之前是需要判断是否开辟成功的如果没有足够的空间去开辟的话realloc是会返回NULL指针的如果用p1去接受那么就会找不到原来的地址进而导致内存泄漏。 1.4C/C程序的内存开辟 1. 栈区stack在执行函数时函数内局部变量的存储单元都可以在栈上创建函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中效率很高但是 分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返 回地址等。 2. 堆区heap一般由程序员分配释放 若程序员不释放程序结束时可能由OS回收 。分 配方式类似于链表。 3. 数据段静态区static存放全局变量、静态数据。程序结束后由系统释放。 4. 代码段存放函数体类成员函数和全局函数的二进制代码 二通讯录管理系统 头文件 contact.h #includestdio.h #includeassert.h #includestring.h #includestdlib.h //通讯录信息包含姓名年龄性别电话住址 typedef struct PeoInfo {char name[20];int age;char sex[10];char tele[12];char addr[30]; }PeoInfo; typedef struct Contact {//每个人的信息PeoInfo* data;//当天通讯录存储的个数int count;//当前通讯录的容量int capacity; }Contact;//销毁通讯录 void DestoryContact(Contact* pc); //初始化通讯录 void InitContact(Contact* pc);//增加通讯录信息 void AddContact(Contact* pc);//打印通讯录的内容 void ShowContact(Contact* pc); //删除通讯录的内容 void DelContact(Contact* pc); //查找通讯录的信息 void SearchContact(Contact* pc); //修改通讯录的信息 void ModifyContact(Contact* pc); //排序通讯录的内容 void SortContact(Contact* pc); contact.c文件 #includecontact.h//初始化通讯录 void InitContact(Contact* pc) {//断言pc不为空assert(pc);//初始时我们给通讯录两个大小的空间Contact* temp (PeoInfo*)calloc(2, sizeof(PeoInfo));//如果开辟成功这将if (temp){pc-data temp;pc-capacity 2;pc-count 0;} }//检测通讯录容量 void Checkcapacity(Contact* pc) {//如果当前容量等于我们的存放信息的个数那么我们就扩容if (pc-capacity pc-count){Contact* temp (Contact*)realloc(pc-data, sizeof(PeoInfo) * 4);if (temp){pc temp;//每次增容成功会都要增加capacity的值pc-capacity pc-capacity 4;printf(增容成功\n);}} }//增加联系人 void AddContact(Contact* pc) {assert(pc);//判断通讯录是否已满Checkcapacity(pc);//添加信息printf(请输入姓名:);scanf(%s, pc-data[pc-count].name);printf(请输入年龄:);scanf(%d, pc-data[pc-count].age);printf(请输入性别:);scanf(%s, pc-data[pc-count].sex);printf(请输入电话:);scanf(%s, pc-data[pc-count].tele);printf(请输入住址:);scanf(%s, pc-data[pc-count].addr);//每次添加联系人之后要将count1pc-count;printf(添加成功\n); }//销毁通讯录 void DestoryContact(Contact* pc) {//释放我们申请的空间free(pc-data);pc-data NULL; }//展示通讯录的信息 void ShowContact(Contact* pc) {assert(pc);int i 0;printf(%-10s%-10s%-10s%-12s%-10s\n, 姓名, 年龄, 性别, 电话, 住址);for (i 0; i pc-count; i){printf(%-10s%-10d%-10s%-20s%-15s, pc-data[i].name,pc-data[i].age,pc-data[i].sex,pc-data[i].tele,pc-data[i].addr);printf(\n);}}//查找通讯录里面是否有这个 不考虑重名问题 int find_by_name(Contact* pc, char name[]) {assert(pc);int i 0;for (i 0; i pc-count; i){if (strcmp(pc-data[i].name, name) 0){return i;}}return -1; }//删除通讯录中某个人的信息 void DelContact(Contact* pc) {assert(pc);printf(请输入要删除人的姓名:);char name[20] { 0 };//如果通讯录中没有信息if (pc-count 0){printf(通讯录中没有信息可删除\n);return;}scanf(%s, name);//查找信息int pos find_by_name(pc, name);if (pos -1){printf(要删除的人不存在\n);return;}//删除信息int i 0;for (i pos; i pc-count - 1; i){pc-data[pos] pc-data[pos 1];}pc-count--;printf(删除成功\n); }//查找通讯录中的某个人 void SearchContact(Contact* pc) {assert(pc);if (pc-count 0){printf(通讯录中没有信息可删除\n);return;}char name[20] { 0 };printf(请输入你要查找人的名字:);scanf(%s, name);int pos find_by_name(pc, name);if (pos -1){printf(要删除的人不存在\n);return;}printf(要查找人的信息如下:\n);printf(%-10s%-10s%-10s%-12s%-10s\n, 姓名, 年龄, 性别, 电话, 住址);printf(%-10s%-10d%-10s%-20s%-15s, pc-data[pos].name,pc-data[pos].age,pc-data[pos].sex,pc-data[pos].tele,pc-data[pos].addr);printf(\n); }//修改通讯录中某个人信息 void ModifyContact(Contact* pc) {assert(pc);if (pc-count 0){printf(通讯录中没有信息可修改\n);return;}char name[20] { 0 };//查找printf(请输入你要修改信息人的名子:);scanf(%s, name);int pos find_by_name(pc, name);if (pos -1){printf(要修改的人的信息不存在\n);return;}//修改printf(请输入你要修改的内容:\n);printf(请输入姓名:);scanf(%s, pc-data[pos].name);printf(请输入年龄:);scanf(%d, pc-data[pos].age);printf(请输入性别:);scanf(%s, pc-data[pos].sex);printf(请输入电话:);scanf(%s, pc-data[pos].tele);printf(请输入住址:);scanf(%s, pc-data[pos].addr);printf(修改成功\n); }//给qsort函数的比较函数 int cmp_by_name(const void* e1, const void* e2) {return strcmp(((PeoInfo*)e1)-name, ((PeoInfo*)e2)-name); } //排序我们的通讯录按照名字排序 void SortContact(Contact* pc) {assert(pc);qsort(pc-data, pc-count, sizeof(PeoInfo), cmp_by_name);printf(排序成功\n); } test.c #include contact.hvoid menu() {printf(**************************************\n);printf(**************************************\n);printf(******* 1.add 2.Del **********\n);printf(******* 3.search 4.modify **********\n);printf(******* 5.show 6.sort **********\n);printf(******* 0.exit **********\n);printf(**************************************\n);printf(**************************************\n); } int main() {int input 0;Contact con;InitContact(con);do{ //打印菜单做提示menu();printf(请选择:);scanf(%d, input);switch (input){case 1:AddContact(con);break;case 2:DelContact(con);break;case 3:SearchContact(con);break;case 4:ModifyContact(con);break;case 5:ShowContact(con);break;case 6:SortContact(con);break;case 0:printf(退出程序\n);DestoryContact(con);break;default:printf(选择错误请重新选择:);break;}} while (input);return 0; }
http://www.hkea.cn/news/14570043/

相关文章:

  • 网站模板怎么改移动网站有哪些
  • 网站建设设计平台做外贸怎么登陆国外网站
  • 淄博 网站建设个人网站设计图片
  • 坂田做网站的公司给自己广告公司宣传
  • 用群晖nas做网站创业项目排行榜前十名
  • 网站建设企业排行榜wordpress快速部署
  • 手机网站用模版苏州互联网公司集中在哪里
  • 东莞网站开发前三强网站建设需要什么条件
  • 个人购物网站怎么备案吴江建设工程招标中心网站
  • 中兴建设有限公司网站外贸网站源代码下载
  • 常州在线制作网站环保类网站模板免费下载
  • 手机网站你了解的大连网站建设策划
  • 做网站投放广告vs2008做网站
  • 本科学院网站建设方案网站建设技术实现难点
  • 易语言怎么用网站做背景音乐企业首次建设网站的策划方案
  • 太原做网站价格做外贸翻译用哪个网站好
  • 基因网站开发wordpress 简码 文章图片
  • 漳州做网站多少钱你好南京网站
  • 昆山市住房和城乡建设网站成品源码1277
  • 建站公司用的服务器seo公司优化
  • 江苏 网站建设惠州做网站公司
  • asp.net 公司网站怎么申请网页域名
  • 成熟的网站怎么做seo推广好的竞价推广托管
  • wordpress企业站主题哪个好集团网站策划
  • 白云区pc端网站建设餐饮公司 网站建设
  • 网站怎么做域名解析html什么意思
  • 硅胶东莞网站建设wordpress许愿插件
  • 大同网站建设制作网页制作免费下载
  • 红酒公司网站建设85度c蛋糕房网站系统建设
  • 企业网站建设公司选择分析什么网站做任务可以赚钱