广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中的柔性数组你真的了解吗
  • 661
分享到

C语言中的柔性数组你真的了解吗

2024-04-02 19:04:59 661人浏览 独家记忆
摘要

目录柔性数组概念:特点:与指针动态开辟的比较指针动态开辟柔性数组指针动态开辟的缺点总结柔性数组概念: 柔性数组就是一种特殊的数组 它也是结构体最后一个成员 也就是说,它存在结构体最后

柔性数组概念:

柔性数组就是一种特殊的数组

它也是结构体最后一个成员

也就是说,它存在结构体最后一个成员的位置上

特点:

1.柔性数组在结构体的大小是未知的,在sizeof中不计算其大小

#include<stdio.h>
struct S
{
	int n ;
	int arr[0];//或者int arr[];
};
main()
{
	printf("The size of the structure is  %d",sizeof(struct S));
	return 0;
}

2.在结构体中,如果存在柔性数组,就必须满足它的前面含有其它的成员,来申请空间,,因为他的大小本身是未知的,不计算大小。

3.包含柔性数组的结构体要靠malloc去动态申请这块空间,这就体现了柔性数组的柔,也就是可以控制大小,且分配的空间一定满足大于其它成员的大小。

与指针动态开辟的比较

在日常的编程中,有时候需要在结构体中存放一个长度动态的数组

一般的做法,是在结构体中定义一个指针成员,这个指针成员指向该数组所在的动态内存空间

指针动态开辟

#include<stdio.h>
struct S
{
	int n;
	int* arr;
};
 
int main()
{
	struct S* ps = (struct S*)malloc(sizeof(struct S));
	ps->n = 100;
	ps->arr = (int*)malloc(40);
	free(ps->arr);
	ps->arr = NULL;
	free(ps);
	ps = NULL;
	return 0;
}

通过柔性数组来实现如下:

柔性数组

#include<stdio.h>
struct S
{
	int n;
	int arr[0];//柔性数组
};
int main()
{
	struct S* ps = (struct S*)malloc(sizeof(struct S)+40);
	//使用
	//改变申请的空间
	struct S* tmp= (struct S*)realloc(ps, sizeof(struct S)+80);
	if (tmp == NULL)
	{
		return;
	}
	if (tmp != NULL)
	{
		ps = tmp;
	}
	return 0;
}

 

指针动态开辟的缺点

1.此方式会多次进行开辟于释放动态申请的空间,就容易会导致错误

2.容易出现内存碎片

当指针动态开辟的足够多的时候,中间就会出现很多内存碎片,每个内存碎片不连续

就会导致空间的浪费

3.相较于柔性数组,CPU访问的速度要慢一些

CPU访问内存大部分在访问一个空间后,就会访问相邻的空间,就不一次性访问下一个连续的空间,这就会导致,在一定程度上的降速。 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: C语言中的柔性数组你真的了解吗

本文链接: https://www.lsjlt.com/news/139441.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中的柔性数组你真的了解吗
    目录柔性数组概念:特点:与指针动态开辟的比较指针动态开辟柔性数组指针动态开辟的缺点总结柔性数组概念: 柔性数组就是一种特殊的数组 它也是结构体最后一个成员 也就是说,它存在结构体最后...
    99+
    2022-11-13
  • C语言中的柔性数组你了解吗
    目录1.什么是柔性数组2.柔性数组应该如何使用3.柔性数组的替代方案及内存分布对比4.柔性数组有哪些优点总结1.什么是柔性数组 柔性数组就是大小可以变化的数组。 注意跟C99中的变长...
    99+
    2023-05-15
    C语言柔性数组使用 C语言 柔性数组 C语言 数组
  • 深入了解一下C语言中的柔性数组
    目录什么是柔性数组柔性数组的使用什么是柔性数组 柔性数组是在C99中定义的 结构体的最后一个元素允许是未知大小的数组,这就叫柔性数组 柔性数组的长度可以写成0,也可以不规定数组长度 ...
    99+
    2023-02-13
    C语言柔性数组使用 C语言柔性数组
  • 一文带你了解C语言中的0长度数组(可变数组/柔性数组)
    目录零长度数组概念0长度数组的用途GNU Document中 变长数组的支持0长度数组的其他特征零长度数组概念 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的...
    99+
    2023-03-19
    C语言0长度数组 C语言零长度数组 C语言可变数组 C语言柔性数组
  • C语言 柔性数组的使用详解
    目录一.柔性数组的特点二.柔性数组的使用1.如何使用柔性数组2.不用柔性数组的话有什么代替三.柔性数组的优势1.方便内存释放2.提高访问速度一.柔性数组的特点 struct S {...
    99+
    2022-11-13
  • C++中的数组你真的理解了吗
    目录1 概述2 一维数组2.1 一维数组定义方式2.2 一维数组组名2.3 冒泡排序3 二维数组3.1 二维数组定义方式3.2 二维数组数组名3.3二维数组应用举例总结1 概述 所谓...
    99+
    2022-11-13
  • C语言中0数组\柔性数组的使用详解
    前言: 上次看到一篇面试分享,里面有个朋友说,面试官问了char[0] 相关问题,但是自己没有遇到过,就绕过了这个问题。 我自己在这篇文章下面做了一些回复。 现在我想结合我自己...
    99+
    2022-11-12
  • Go语言中的数组,你真的掌握了吗?
    Go语言是一门高效、易学易用的编程语言,它在各种场景下都有着广泛的应用。在Go语言中,数组是一种非常重要的数据类型,它被广泛应用于各种场景中。但是,你真的掌握了Go语言中的数组吗?本文将会深入介绍Go语言中的数组。 什么是数组 在Go语...
    99+
    2023-10-08
    数组 自然语言处理 spring
  • C语言中的柔性数组怎么使用
    这篇文章主要讲解了“C语言中的柔性数组怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中的柔性数组怎么使用”吧!1.什么是柔性数组柔性数组就是大小可以变化的数组。注意跟C99中的...
    99+
    2023-07-06
  • C语言编程之动态内存与柔性数组的了解
    目录介绍动态内存分配函数常见的动态内存开辟的错误举个例子柔性数组柔性数组的特点创建变量 1,局部变量–栈区 2,全局变量–静态区 创建数组 1,局部数组–栈区 2,全局数组–静态区 ...
    99+
    2022-11-12
  • C语言的分支和循环语句你真的了解吗
    目录什么是语句?分支语句if语句悬空elseif书写形式的对比练习switch语句default子句循环语句while循环while语句中的break和continue总结什么是语句...
    99+
    2022-11-13
  • 你真的了解Go语言中的数据类型吗?
    Go语言作为一门静态类型语言,数据类型是其非常重要的组成部分。熟悉Go语言中的数据类型,能够更好地理解和使用该语言。本文将带大家了解Go语言中的常用数据类型。 基本数据类型 Go语言中的基本数据类型包括bool、int、float、comp...
    99+
    2023-07-03
    数据类型 npm 框架
  • Go语言中的对象,你真的了解吗?
    Go语言是一种快速、可靠、高效的编程语言,它在近年来越来越受到开发者的关注和青睐。在Go语言中,对象是一种重要的概念,但是很多人对于Go语言中的对象并不是很清楚。本文将深入探讨Go语言中的对象,帮助读者更好地理解和使用该语言。 一、Go语言...
    99+
    2023-10-14
    对象 http git
  • GO语言中的NUMY库,你真的了解吗?
    作为一种高效的编程语言,GO语言在数据科学和机器学习领域中越来越受欢迎。与此同时,许多数据科学家和机器学习工程师都在寻找一种能够简化他们工作流程的库。正是在这样的背景下,NUMY库应运而生。 NUMY库是一个基于GO语言的数学库,它提供了...
    99+
    2023-07-25
    api 异步编程 numy
  • 你真的了解Go语言的索引吗?
    Go语言是一门由Google开发的编程语言,它具有高效、简洁、并发等特性,被广泛应用于Web开发、云计算、网络编程等领域。在Go语言中,索引是一个常用的操作,它可以帮助我们快速定位到某个元素,提高程序运行效率。但是,在本文中,我们将深入探讨...
    99+
    2023-08-23
    索引 unix bash
  • C语言的strcpy函数你了解吗
    目录strcpy函数原型参数讲解返回值详解函数详解第二个注意点:目标空间必须足够大,以确保能存放源字符串第三个注意点:目标空间必须可变总结strcpy 拷贝字符串到目标地址 函数原...
    99+
    2022-11-13
  • C++中的函数你真的理解了吗
    目录1 概述2 函数的定义及调用3 值传递4 函数的常见形式5 函数的声明6 函数的分文件编写作用:让代码结构更加清晰1.2.3.4.总结1 概述 作用:将一段经常使用的代码进行封装...
    99+
    2022-11-13
  • C语言冷门知识之你可能没听过的柔性数组
    目录一、简述二、具体使用1.用创建柔性数组的方法:2.用普通的写法三、柔性数组的特点一、简述 在c99中有明确的规定允许结构体中最后一个数组大小是未知的。 柔性数组其实是结构体中的最...
    99+
    2022-11-12
  • C语言的程序环境与预处理你真的了解吗
    目录1.翻译环境2.运行环境3.预处理详解3.1#define定义的符号3.2#define定义的宏3.3#define的替换规则3.4#与##4.宏与函数对比5.#undef6.条...
    99+
    2022-11-13
  • C++的数据类型你真的了解吗
    目录前言1 整型2 sizeof关键字3 实型(浮点型)4 字符型5 转义字符6 字符串型7 布尔类型 bool8 数据的输入总结前言 C++不像python,创建变量的时候必须指定...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作