问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言可变长数组在GCC编译器中的实现

发布网友 发布时间:2023-05-10 12:52

我来回答

1个回答

热心网友 时间:2024-12-06 01:04


在C99中新加入了对变长数组的支持,即数组的长度可以由某个非const变量来定义。可变数组的空间大小直到程序运行时才能确定,因此只有程序在运行时才能为程序分配空间。在gcc编译器程序会在运行时根据实际指定的大小(变量当前的值)调节esp的值,为数组在栈上分配适当大小的空间。由于要在运行时才能为数组分配空间,在开始分配空间之前空间的大小是不确定的,因此分配空间的起始地址也是不确定的(例如要在栈上分配两个可变长数组的情况下)。为了在以后的代码中对可变长数组的内容进行引用操作,程序必须通过某种方式获取可变长数组的地址。在gcc编译器中会在相对于ebp固定的偏移量的栈上分配的一个固定大小的区域(称为内情向量)来记录可变长数组的信息,如数组的开始地址等。后继代码通过内情向量中的起始地址访问可变长数组。
因为数组依靠在程序运行时动态的调整esp来分配空间,所以这种类型的数组只能够定义在栈内,不能够定义在数据段上(全局数组,静态数组)。
代码
#include stdio.h
#include stdlib.h
int main()
{
unsigned int size;
scanf("%d",size);
int var[size]; //定义变长数组
if(size == 0)
{
printf("empty array\n");
return 0;
}
else
{
/*error: 'for' loop initial declarations are only allowed in C99 mode|
note: use option -std=c99 or -std=gnu99 to compile your code*/
for(int i = 0; i
size; i++)
{
printf("%d\t",var[i]);
}
}
return 0;
}
使用CodeBlocks编译通过,在循环时使用C99标准代码。编译时要添加-std=c99参数,可以在Settings菜单的Compiler and debugger下设置。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何选手机号码才大吉好运发财的手机号码? 手机号码吉凶吉祥号富贵大吉的手机尾号有哪些? 鸽子吃卫生纸是缺什么 为什么鸽子不吃菜叶子而只吃玉米呢 电脑显示未安装evernote怎么回事请教高手我的印象笔记不能在台式电脑... 韩国是岛国吗 韩国最便宜的vps 电脑开机时出现rebootandselectproperbootdevice怎么办 reboot and sel... ...出现reboot and select proper boot device 高清的液晶电视最好的选择?? 1000a双电源开关消防健是什么意思 泰国曼谷市内退税攻略2019+退税流程 曼谷市内退税攻略 广东省乡镇机关算不算一级财政 泰国购物退税怎么算泰国退税能退多少 一级政府.一级财政,如何理解? 帕萨特内置数据连接关闭会影响哪些功能 1万4泰国退税多少 迈腾的内置数据连接怎么关? 大众车内置流量使用说明 yhfs是什么成语的拼音缩写? 大众车如何连接手机 劳动合同到期忘记续签怎么补救 大众宝来2020款车载导航为什么提示联接数据 内置数据连接什么意思 金蝶k3mrp的已分配量是什么意思 大众内置数据连接打开好还是不打开好 铝方通一个平方一根吊丝可行? 迈腾内置数据连接什么意思 surprises发音 C语言中until语句怎么写? ...智能双电源自动转换开关REQ1-125/4P上面带有消防双分24V啥意思... 【求助】关于YY赌豆开庄的规则。 17个豆子 怎么拿才能赢 有什么秘诀没? 为什么有的人手会发亮? 手掌上有一块皮肤比其它地方油亮是什么原因 手上胳膊皮肤上出了亮晶晶的东西,这是什么毛病?是皮肤病吗?_百度知 ... 手指头肥胖发亮又是仲是什么原因 谁知道我们家的乌龟为什么半夜会叫? 判决书上"本判决确定给付之日"指的是哪个日期 我家的乌龟在晚上老叫,是什么原因? 求助!我家养的龟龟晚上叫是怎么回事啊 乌龟晚上叫正常吗 我家的小乌龟晚上怎么发出一种叫声啊?谁能告诉我是怎么回事吗?_百度... 起始时间是什么意思? 占坑是什么意思 占坑贴是什么意思 任务占坑是什么意思 ...就是一楼带院子的房子”,具体的原因是什么呢? 贝壳买房更换维护人,占坑的还是有提成吗