首页

文章

C语言中数组长度不能用变量定义吗?

发布网友 发布时间:2022-04-20 03:10

我来回答

3个回答

热心网友 时间:2023-07-10 15:31

数组的大小不能用变量表示的,是因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用:

# define m 100

# define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。

C语言里,所有变量空间都是在程序运行之初向系统申请的,包括和指针,它也需要空间,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。解决的办法如前面所说,如:

int a[n];

可改为

int* const a = (int*)malloc(sizeof(int)*n);

这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:

a[1]

等价于

*(a + 1)

而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质。

热心网友 时间:2023-07-10 15:32

c99标准支持数组长度为变量,你用的是较新的编译器

热心网友 时间:2023-07-10 15:32

定义数组必须是需要知道定多大的,不然编译器根本不知道你要分配的内存有多大。但是有些特殊情况,中括号里面可以是空的,比如:
char str[] = "abc";
这个只是你没写大小而已,但编译器帮你分配了4个字节的大小给str,包括3个字符和字符串结束符'\0'
另一种情况就是出现在结构体里面,比如:
struct A
{
int n;

char str[];

};
这里的str属于一个柔性数组,是不定长的,详情可以百度百科看柔性数组是什么意思。这个结构体大小就只有4个字节,后面的需要使用的时候才分配。这种只能在结构体里面使用,其他地方定义的数组必须要分配好数组的大小,如果想要用变量就需要用到动态数组,也就是new一段内存出来。
不知道我说那么多你是否明白。
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 恒信贵金属黄金交易怎么样? java中怎么把一个数组放入三个未知数组中长度最长... 在恒信贵金属投资黄金真的好吗?安全吗?为什么? JAVA中如何动态改变数组长度 动态数组 arraycopy 恒信贵金属黄金交易帐户里的那个过夜利息是怎么计... 能告诉我我 我的代码出了什么问题吗老是报错说目标... 恒信贵金属黄金交易的交易编码格式是怎样的? C#目标数组长度不够怎么解决 如何在恒信贵金属操作黄金交易? java数组复制 源数组和目标数组的长度必须相等吗?... 恒信贵金属交易现货黄金交易每手成本是多少? C#中合并datatable出现错误,目标数组的长度不够。... 恒信贵金属黄金交易最多只能交易20手? 为什么很多投资者都说恒信贵金属是黄金交易平台中... 恒信贵金属交易一手黄金要多少保证金? ppt什么字体比较合适 ppt什么字体最好看 PPT 有什么个人特别喜欢的字体推荐吗? ppt什么字体好看 如何注销360账号 为什么恒信贵金属黄金交易吸引很多人做买卖赚钱? js中数组的长度不固定,元素固定该如何定义 恒信贵金属的可信度是有多高? 在C++中如何给字符串数组定义长度呢? 恒信贵金属的黄金交易,是不是建仓和平仓都要收取... C++问题,为什么数组的长度不正确啊? 如何利用恒信贵金属黄金投资?怎么办 c++数组最长无重复子数组长度 恒信贵金属现货黄金交易中的点差是怎么显示的? 如何把一个字符指针指向的字符串复制给字符数组 如何在恒信贵金属投资黄金?怎么办? java中怎么从一个数组中截取一定长度的元素放到新... 恒信贵金属黄金交易0.1手,本金630美元危险吗 如何求一个(正数)无序数组中最长有序子数组的长度? 在恒信贵金属交易现货黄金的交易编码是不是免费 java动态数组长度问题 c语言中定义一个数组可以不写数组的长度吗? 有92一个97长度未知的数组a,如果它的97长度为0就... 关于数组长度这个概念问题 过氧化钠和氧化钠会与氧气反应吗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com