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

给网站做优化怎么做深圳网站设计服务

给网站做优化怎么做,深圳网站设计服务,行业关键词,35岁学网站开发怎么样柔性数组从C99开始支持使用 1.柔性数组的概念 概念: 结构体中,结构体最后一个元素允许是未知大小的数组,这就叫[柔性数组]的成员 struct S {int n;char arr[]; //数组大小未知(柔性数组成员) }; 柔性数组的特点: 结构体中柔性…

柔性数组从C99开始支持使用

1.柔性数组的概念

概念:

结构体中,结构体最后一个元素允许是未知大小的数组,这就叫[柔性数组]的成员

struct S
{int n;char arr[]; //数组大小未知(柔性数组成员)
};

柔性数组的特点:

结构体中柔性数组成员前必须至少有一个其他成员

sizeof返回的这种结构大小不包括柔性数组的内存

struct S
{int n;char arr[]; 
};
int main()
{  printf("%zu\n", sizeof(struct S););   //4return 0;
}

由图可知sizeof计算时不会包含柔性数组的大小

2.如何给柔性数组开辟空间呢?

如果结构体中有柔性数组,那么系统应该这么帮结构体开辟空间

怎样使用:

#include <stdio.h>
#include <stdlib.h>typedef struct S
{int n;char arr[];
}S;int main()
{//sizeof(char)*10 根据需求改变,柔性数组就是可变数组S* ptr = (S*)malloc(sizeof(S) + sizeof(char) * 10);if (ptr == NULL){perror("S::malloc");return 1;}//ptr->n = 4;int i = 0;for (i = 0; i < 10; i++){ptr->arr[i] = 'a';}for (i = 0; i < 10; i++){printf("%c ", ptr->arr[i]);}// free(ptr);// ptr = NULL;//增容S* pc = (S*)realloc(ptr, sizeof(S) + sizeof(char) * 20);if(pc == NULL){perror("S::realloc");return 1;}else{ptr = pc;}free(ptr);ptr = NULL; return 0;
}

3.如果我们给柔性数组申请了动态内存会不会改变结构体大小?

不会!!!

#include <stdio.h>
#include <stdlib.h>typedef struct S
{int n;char arr[];
}S;int main()
{//sizeof(char)*10 根据需求改变,柔性数组就是可变数组S* ptr = (S*)malloc(sizeof(S) + sizeof(char) * 10);if (ptr == NULL){perror("S::malloc");return 1;}printf("%zu", sizeof(S));free(ptr);ptr = NULL;return 0;
}

运行结果:

形式如图所示:

可以看到申请了空间之后还是4字节

包含柔性数组的结构体用malloc()函数进行内存的动态分配,并且分配的内存大小应该大于结构体的大小,以适应柔性数组的预期大小

4.使用字符型指针代替柔性数组

typedef struct S
{int n;char* str;
}S;int main()
{printf("%zu", sizeof(S));return 0;
}

运行结果:

进行代替

#include <stdio.h>
#include <stdlib.h>typedef struct S
{int n;char* str;
}S;int main()
{S* ptr = (S*)malloc(sizeof(S));if (ptr == NULL){perror("malloc");return 1;}ptr->n = 4;ptr->str = (char*)malloc(sizeof(char) * 10);if (ptr->str == NULL){perror("ptr->str::malloc");return 1;}int i = 0;for (i = 0; i < 10; i++){ptr->str[i] = 'a';}for (i = 0; i < 10; i++){printf("%c ", ptr->str[i]);}//增容char* pc =(char*)realloc(ptr->str, sizeof(char) * 20);if(pc != NULL){ptr->str = pc;}else{perror("pc::realloc");return 1;}//释放顺序不要弄反,也可以先释放pc//如果先释放ptr,ptr->str就没有了free(ptr->str);ptr->str = NULL;free(ptr);ptr = NULL;return 0;
}

这个形式如图:

5.柔性数组的好处

虽然用char* str也可以实现,但是有弊端

使用柔性数组的好处:

->1.malloc 只需要使用一次

->2.free 只需要使用一次

->3.空间是连续的

与char* str相比

不容易出错

内存碎片少,空间利用率高

效率高(访问速度相对快)

http://www.yayakq.cn/news/439233/

相关文章:

  • 计算机网站建设相关的书籍怎样做网站上更改文字
  • 中国住房和城乡建设部查询网站6国内重大新闻事件2021年10月
  • 壹搜网站建设优化排名欢迎访问中国建设银行网站个人客户6
  • 心理医院网站优化服务商网页设计制作详细流程
  • 个性化网站有哪些想接外包做网站
  • 网站开发工作流程友情链接添加在网站中有什么用
  • 东莞软件网站推广公司的网站
  • 在线网站建设收费徐州网站建设方案书
  • 营销型网站建设的步骤请简述企业网站建设的流程
  • 响应式网站好处房产网签流程及注意事项
  • 网站建设存在的问题有哪些商城网站建设推广
  • 营销型网站用什么模版合适app下载登录
  • 广东建设工程网站电子商务营销方案
  • 网站策划书的主题有哪些视频网站开发流程图
  • 常州网站推广软件信息财务软件哪个好用
  • 沈阳公司网站设计公司阿里云做的网站如何发布
  • 手机移动开发网站建设合肥专业建设网站
  • 福州网站搭建重庆观音桥好吃街
  • 国外创意网站设计wordpress木马乐主题
  • 闵行专业做网站wordpress云视链
  • 甘肃seo网站WordPress静态主题
  • 网站文章多久收录什么网站可以做微官网
  • 安阳网站制作 网络服务网站建设的相关问题
  • word怎么做网站链接个人网站建站指南
  • 在哪做网站不要钱易货小程序开发教程
  • 做wow宏的网站jsp与asp做的网站
  • 网站建设源码登别的网站应怎么做
  • seo包括网站建设吗十大免费剪辑软件下载
  • 网站建制作公司石家庄招标信息网
  • 讯美 深圳网站建设景区网站怎么做的