首页 > 其他分享 >C99中的柔性数组和其内在本质

C99中的柔性数组和其内在本质

时间:2023-10-24 15:24:25浏览次数:27  
标签:arr 其内 int C99 struct 数组 柔性 array size

示例:

#include <stdio.h>
#include <stdlib.h>

// 定义一个包含柔性数组的结构体
struct flex_array {
	int size;
	int data[0];
};

int main() {
	int i;
	int size = 10;

	// 动态分配内存
	struct flex_array *arr = malloc(sizeof(struct flex_array) + sizeof(int) * size);
	if (arr == NULL) {
		printf("Memory allocation failed\n");
		return -1;
	}

	// 设置数组大小
	arr->size = size;

	// 使用柔性数组
	for (i = 0; i < arr->size; i++) {
		arr->data[i] = i;
	}

	// 打印柔性数组的内容
	for (i = 0; i < arr->size; i++) {
		printf("%d ", arr->data[i]);
	}
	printf("\n");

	// 释放内存
	free(arr);

	return 0;
}

  

输出:0 ~ 9

printf("sizeof(struct flex_array)=%d\n", sizeof(struct flex_array)); 输出是4,说明从效果看data在数组中的长度就是0

 

反汇编看了下:

看来本质就是编译器的一个trick而已。

arr->data指向的地址就是数组起始地址:

从数组的汇编本质来说,编译器的这种行为是非常合理且自然的。

 

标签:arr,其内,int,C99,struct,数组,柔性,array,size
From: https://www.cnblogs.com/bonelee/p/17784819.html

相关文章

  • C语言:‘for‘ loop initial declarations are only allowed in C99 mode
    求最大公约数之穷举法mistake: because: 只允许在C99模式下使用‘for’循环初始化声明  solution:不在for()中初始化生命变量 ......
  • 柔性生产线MES系统的应用实施
    柔性生产线MES系统的应用实施-模具管理软件丨电子MES丨MES系统厂家丨汽车零部件MES系统苏州微缔软件股份有限公司官网http://www.videasoft.com/hangyexinwen/897.html柔性生产线MES系统的应用实施发布时间:2023-02-10作者:videasoft   近年来,随着JIT(JustInTime)、B......
  • 世界第5大搜索引擎Yandex爆出源码后获得的其内部若干排名因素
    相关新闻:中文翻译版:https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9394501005789721090%22%7D&n_type=-1&p_from=-1英文版:https://www.hackread.com/yandex-source-code-hacked-leaked/  =============================      ========......
  • 向量数据库(第 2 部分):了解其内部结构
    这是关于向量数据库的系列文章中的第二篇。正如本系列的第一篇所提到的,2023年上半年关于向量数据库的营销(不幸的是,有些是炒作)非常多,如果你正在阅读这篇文章,你可能对向量数据库在底层是如何工作的,以及如何在高效的向量存储之上构建搜索功能感兴趣。为什么现在大家都在谈论向量数据库......
  • C99 Clion 项目目录结构 CMakeLists.txt
    简单helle目录如下.├──CMakeLists.txt├──hello│  └──hello.c└──main.cmain.c#include"hello//hello.c"intmain(){print_hello();return0;}hello.c#include<stdio.h>staticvoidprint_hello();voidprint_hello(){pr......
  • 替换开源LDAP,打通飞书、深信服,西井科技用宁盾目录服务提升供应链柔性化能力
    01客户介绍上海西井科技股份有限公司成立于2015年,是一家深耕于大物流领域的人工智能公司,旗下无人驾驶卡车品牌Q-Truck开创了全球全时无人驾驶新能源商用车的先河,迄今为止已为全球16个国家和地区,120余家客户打造智能化升级体验,场景覆盖海陆空铁、工厂等货运物流领域。挑战一开源LDAP......
  • CLion C99 中的
    cmake路径/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake-versionCMake主要配置文件配置:CMakeLists.txt作用:可以生成适用于多种构建系统的配置文件构建工具Ninjamakecmake_minimum_required(VERSION3.23)#指定cmake版本project(testC)#命令设......
  • 图-入度n-1,出度0-lc997
    小镇里有​​n​​​个人,按从​​1​​​到​​n​​的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性1和属性2。给你一个数组​​trust​​......
  • 柔性事务和传统事务
     传统事务事务是原子的,要么都成功要么都失败。再进一步看就有ACID这四个属性,原子性(Atomictiy)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabilit)。原子性:事务的最小单元,在一个事务里面,要么全部成功,要么全部回滚,部分完成不是一个事务的概念。 一致性:在事务开始和完成的时候......
  • 结构体复合字面量(C99)
    语法:  (结构类型){初始化列表}; 用法:可为一个结构变量提供多个可供替换的值;1structbook{2chartitle[20];3charauthor[20];4floatvalue;5};67intmain()8{9structbookreadfirst;10intscore;11......