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

去哪找做塑料的网站直通车怎么开才有效果

去哪找做塑料的网站,直通车怎么开才有效果,网络服务协议模板,关于化妆品网页设计的模板👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前是C语言学习者
✈️专栏:C语言航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注


前言

说起数组,一维数组、二维数组、字符数组、整型数组和浮点型数组,我相信大家并不陌生吧,今天我们一起看看柔性数组!

目录

  • 前言
  • 一、柔性数组的概念和定义
  • 二、柔性数组的特点
  • 三、柔性数组的使用
  • 四、柔性数组的优势

一、柔性数组的概念和定义

在C99中,结构中的最后一个元素允许是未知大小的数组,我们把这样的数组称为柔性数组成员。

【定义】

struct S
{int i;int a[]; //柔性数组
};

若有些编译器无法编译,可以改成以下这种:

struct S
{int i;int a[0];//柔性数组成员
};

二、柔性数组的特点

  • 结构中的柔性数组前必须至少有一个其他成员
    在这里插入图片描述
  • sizeof返回的这种结构大小不包括柔性数组的内存
    在这里插入图片描述
  • 包含柔性数组成员的结构用malloc函数进行动态内存分配,并且分配的内存应该大于结构体大小,以适应柔性数组的预期大小
    在这里插入图片描述

三、柔性数组的使用

动态内存开辟函数讲解:传送门

#include <stdio.h>
#include <stdlib.h>
struct S
{int i;char a[];
};
int main()
{//包含柔性数组成员的结构用`malloc`函数进行动态内存分配//并且分配的内存应该大于结构体大小struct S* sp = (struct S*)malloc(sizeof(struct S) + 10 * sizeof(char));//若sp为空指针,说明开辟动态内存失败if (sp == NULL){return 1;}//否则开辟成功//使用sp->i = 100;for (int i = 0; i < 10; i++){sp->a[i] = 'x';}//打印for (int i = 0; i < 10; i++){printf("%c ", sp->a[i]);}//释放free(sp);sp = NULL;return 0;
}

在这里插入图片描述

甚至还能扩容realloc

#include <stdio.h>
#include <stdlib.h>
struct S
{int i;char a[];
};
int main()
{//包含柔性数组成员的结构用`malloc`函数进行动态内存分配//并且分配的内存应该大于结构体大小struct S* sp = (struct S*)malloc(sizeof(struct S) + 10 * sizeof(char));//若sp为空指针,说明开辟动态内存失败if (sp == NULL){return 1;}//否则开辟成功//使用sp->i = 100;for (int i = 0; i < 10; i++){sp->a[i] = 'x';}//扩容(多加10字节的空间)struct S* p = (struct S *)realloc(sp, sizeof(struct S) + sizeof(char) * 20);//如果p为空指针说明扩容失败if (p == NULL){return 1;}else{sp = p;p = NULL;}for (int i = 10; i < 20; i++){sp->a[i] = 'w';}//打印printf("%d\n", sp->i);for (int i = 0; i < 20; i++){printf("%c ", sp->a[i]);}return 0;
}

在这里插入图片描述

所以柔性数组在内存其实是这样的
在这里插入图片描述
它在内存是连续

四、柔性数组的优势

除【柔性数组的使用】样例以外,也可以设计成下面这样:

#include <stdio.h>
#include <stdlib.h>struct  S
{int i;char* a;
};int main()
{//为结构体开辟空间struct S* sp = (struct S*)malloc(sizeof(struct S));//若sp = NULL,说明开辟失败if (sp == NULL){return 1;}//否则开辟成功//使用内存空间sp->i = 100;//为char* a开辟10个字节空间sp->a = (char*)malloc(sizeof(char) * 10);//使用for (int i = 0; i < 10; i++){sp->a[i] = 'w';}//或者还能为char* a扩容char* p = (char*)realloc(sp->a, 20 * sizeof(char));if (p == NULL){return 1;}else{sp->a = p;p = NULL;}//使用扩容的空间for (int i = 10; i < 20; i++){sp->a[i] = 'J';}//打印printf("int i = %d\n", sp->i);for (int i = 0; i < 20; i++){printf("%c ", sp->a[i]);}//释放空间free(sp->a);sp->a = NULL;free(sp);sp = NULL;return 0;
}

在这里插入图片描述

一个常见的问题:为什么要先释放sp->a的内存空间

  • 首先程序是先为结构体开辟空间
    在这里插入图片描述
  • 接着又为char*开辟空间
    在这里插入图片描述
    所以,若先对sp释放空间,到后面就不能通过sp找到char* c开辟的空间

柔性数组好处的总结:

  • 对于柔性数组来说,开辟空间(malloc)只需要一个,释放空间(free)也只需要一次,且内存空间是连续的,而对于上面的代码来说,开辟空间需要二次,释放空间也同样需要二次,且内存空间是不连续的。所以它第一个好处是方便内存释放
  • 连续的内存有益于提高访问速度
http://www.yayakq.cn/news/36281/

相关文章:

  • 宁波海曙网站开发公司洛阳网站推广公司
  • 网站建设mfdos 优帮云wordpress 登录空白页
  • 视频网站logo怎么做的免费模板网站知乎
  • 大连做网站哪家好建设营销型网站不足之处
  • html5韩国网站模板移动开发技术
  • 建网站权威机构nginx建设网站教程
  • 做网站的咋挣钱佘山做网站公司
  • 班级设计网站建设无锡网站建设策划方案
  • 国外网站国内做好还是国外做孝感网站开发找优搏
  • 免费做网站收录的网站建设账务处理
  • 网站建设 400电话 广告语分类达人介绍
  • 晋中住房保障和城乡建设局网站wordpress数据维护
  • 网站建设宁夏凤凰云平面设计培训班要学多久
  • 360怎么免费建网站外国风格网站建设用途
  • 做网站如何变现导视设计分析
  • 目前流行的网站分辨率做多大网页制作实训报告总结
  • 怎样找回网站域名密码wordpress the7 慢
  • 泰安可以做网站的公司自己做网站怎么做的
  • 做网站系统的销售怎么做宁波seo网络推广定制多少钱
  • python做网站的多吗如何创做网站
  • 如何做企业网站做微信广告网站有哪些内容
  • 网站开发支付宝电脑网页游戏平台
  • 盐城网站开发代理网站到处仿
  • 无锡制作网站公司湖南网站设计亮点
  • 做一个配送网站wordpress文章两端对齐
  • 河南县wap网站建设公司企业网站建设一站式服务
  • 网站建设价格差别个人做理财网站
  • 做网站链接的页面怎么做wordpress需要备案
  • 社保个人网站入口网名生成器
  • 青岛做网站需要多少钱oto网站开发