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

茂名网站建设公司电商网站目录优化

茂名网站建设公司,电商网站目录优化,门户网站优化方案,wordpress建手机网站吗👦个人主页: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/598484/

相关文章:

  • 个人网站域名所有权织梦网站一排4张图片
  • 哈尔滨房地产网站建设seo排名外包
  • 怎么用上线了做网站郑州自建网站
  • 服务网站排名咨询数字营销策划
  • php多平台商城网站系统建设怎样做网站的背景图片
  • 盗用网站模板网站建设列入管理费用说明科目
  • 网站开发的目的意义哪个网站可以做设计比赛
  • 网站建设网页怎么排列顺序购物网站模板 php
  • 网站去掉后缀htmlasp网站开发的主要困难
  • 网站开发文档带er图wordpress执行流程
  • 软件技术属于什么学类东莞市seo网络推广怎么样
  • 上行30m可以做网站吗慧算账代理记账公司
  • 自己能网站建设中介如何做网站收客
  • wordpress站点的根目录美工模板网站
  • 天门市城市建设管理局网站浙江公司网站建设制作
  • 社交类网站手机模版网络科技扣钱是咋回事
  • 湖南省建设厅官方网站官网c 做彩票网站
  • 花店商城网站设计珠海品牌网站建
  • 爱心助学网站建设wordpress 4.5.2 中文
  • 邯郸中材建设有限责任公司网站厦门 建网站
  • 沈阳公司网站制作百度网盘官方下载
  • 怎样说服老板做网站建设银行顺德分行网站
  • 多个页面网站的制作方法盾思途旅游网站建设
  • 长沙网站制作哪家专业怎么做vip网站
  • 电子商务网站建设与规划教案贵州省住房和城乡建设厅网站首页
  • 邯郸建公司网站价格专业型网站和个人网站
  • 天津北京网站建设一个静态网站怎么做
  • 做现货IC电子网站的python个人网站开发
  • 旅游网站开发的目的和意义网站建设公司销售经理职责
  • 网站开发选定制还是模板网络营销模式有哪些?