首页 > 其他分享 >结构体柔性数组

结构体柔性数组

时间:2022-08-30 02:22:21浏览次数:67  
标签:ps struct int ++ 数组 柔性 结构

结构体柔性数组(flexible array),C99中,结构体最后一个元素允许是未知大小的数组,这个结构体必须至少有两个成员,这个数组元素必须是最后一个,这种数组叫做[【柔性数组】成员

  1. 以下代码,结构体中的int num[ ]可不定义数组的个数,这个元素叫做柔性数组,结构体计算大小(sizeof)时会忽略int num[ ]的大小

以下方法malloc/calloc增加柔性数组的内存空间是整体的,连续的,CPU访问内存速度快,效率高,free( )时只用释放一次。。如果要用到柔性数组时建议用这种方法   

struct S
{
	int a;
	int num[];
};
int main()
{
	struct S* p = (struct S*)malloc(sizeof(struct S)+20);
	if (p == NULL)
		return 0;
	for (int i = 0; i < 5; i++)
	{
		p->num[i] = i;
	}
	for(int i = 0;i<5; printf("%d ", p->num[i++]));
 free(p)
	return 0;
}

    2.以下为第二种方法给增加柔性数组的内存空间是碎片化的,每次malloc/calloc都会在内存开辟一个新的空间,CPU访问读取内存效率低。

struct S
{
	int a;
	int* p;
};
int main()
{
	struct S* ps = (struct S*)malloc(sizeof(struct S));
	if (ps == NULL)
		return 0;
	ps->p = malloc(5 * sizeof(int));
	if (ps->p == NULL)
		return 0;
	for (int i = 0; i < 5; i++)
	{
		*(ps->p+i) = i;
	}
	for (int i = 0; i < 5; printf("%d ", *(ps->p + i++)));
	int* ptr = (int*)realloc(ps->p, 10 * sizeof(int));
	if (ptr !=NULL)
		ps->p = ptr;
	for (int i = 0; i < 10; i++)
	{
		*(ps->p + i) = i;
	}
	for (int i = 0; i < 10; printf("%d ", *(ps->p + i++)));
	free(ps->p);
	free(ps);	
	return 0;
}

 

标签:ps,struct,int,++,数组,柔性,结构
From: https://www.cnblogs.com/godex/p/16637963.html

相关文章

  • 算法提高课 第四章 数据结构之并查集
    一、并查集1250.格子游戏思路O(mlog(n))将图中的每个点看作并查集的结点,每个被画的边看作合并相邻的点的操作将图中所有点按行或列优先,从1~n*m进行编号每次进行......
  • 【Perl】常见数据结构与算法
    #二分查找usestrict;subbinary_search{my($target,@v)=@_;my$left=0;my$right=@v-1;while($left<$right){my$mid=......
  • 重新排列数组
    重新排列数组一、题目描述给定一个数组nums,元素个数为2n,给数组排序。按[x1,x2,...,xn,y1,y2,...,yn]的格式排列请你将数组按[x1,y1,x2,y2,...,xn,yn]格式重新排列,返......
  • 二进制:给定a b数组 在某种顺序下如果能在找到个c=a^b 而且 对c的&值f的值是最大的
    https://codeforces.ml/contest/1721/problem/D因为最终答案必须是唯一的然后从最高位开始当且当ab各个数子的当前位的1和0是一样的时候就可以通过分配使得c数组当......
  • 双指针:给定两个升序数组a,b;b由a加一个值d转化而来 求d数组
    https://codeforces.ml/contest/1721/problem/C从n往前走因为对于ai他的最大值就是他对应下面的b数组当一个数ai的最小值和最大值都只能取这个数的时候那么后续的数也......
  • 半结构化数据
    1、半结构化数据定义结构化数据:传统数据库中定义的数据,商业的交易数据等都是拥有固定的数据结构。非结构化数据:另一个极端,对于图片、声音和生文本(指未经计算机处理的预......
  • 树状数组
    241.楼兰图腾 分别统计i位置左边比a[i]小的数的个数m、右边比a[i]小的数的个数n,运用乘法原理:1.第一步从左边m个数中任选一个,有m种选法2.第二步从右边n个数中任选一个,......
  • Gym 101775J Straight Master(差分数组)
    题意:给你n个高度,再给你1n每种高度的数量,已知高度连续的35个能消去,问你所给的情况能否全部消去;例:n=4,给出序列1221表示高度1的1个,高度2的2个,高度3的2个,高度4的1个。那......
  • 稀疏数组
    1.当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。2.处理方式为记录数组共几行几列把具有不同值的元素和行列及值记录在一个小规模数组......
  • numpy 数组 浅拷贝 地址
    对于numpy数组:importnumpyasnpa=np.array([1,2,3,4])b=a[0:2]b[0]=np.sum(a[:])/4修改b[0]的值会改变a的值,原因:https://blog.csdn.net/AManFromEarth/arti......