黑马程序员技术交流社区

标题: 关于数组的问题 [打印本页]

作者: woaidd99    时间: 2015-5-29 23:31
标题: 关于数组的问题
本帖最后由 woaidd99 于 2015-5-31 21:26 编辑

比如说  int n = 6
             int a[n] 这种情况  为什么可以啊
             下面还有个情况:
             int n  = 0,;
             scanf("%d", &n);
             int a[n];
           这两个数组的的定义  情况类似吗   
           好像说数组的长度不能是变量吧
            上次打错了  这次改了下,第二种情况允许吗
              
作者: 七尺阳光    时间: 2015-5-30 00:01
int n = 6              int a[n] 这种情况不是说可以,只是说现在的情况只有Xcode支持可以使用,不会报错但是会警告.深层原理是数组在编译链接阶段会开始分配存储空间,而变量在运行后才会赋值.没有值就不确定要给数组分配的存储空间大小.所以编译器不支持
作者: woaidd99    时间: 2015-5-30 00:05
七尺阳光 发表于 2015-5-30 00:01
int n = 6              int a[n] 这种情况不是说可以,只是说现在的情况只有Xcode支持可以使用,不会报错但 ...

那第二种情况呢
作者: 七尺阳光    时间: 2015-5-30 22:10
第二种会直接报错的.变量a  未定义 是不能拿来使用的.你想用变量来代替数组长度的话.建议使用宏定义
#define  n   5  定义在main函数外. 然后n 就可以直接拿来使用了.想修改值的话,直接把5修改成其他数值就可以了
作者: 追随自然    时间: 2015-5-31 09:22
学习了!
作者: talent123    时间: 2015-5-31 16:57
数组大小必须定义
不能用变量
作者: doushu    时间: 2015-5-31 21:07
顶顶顶顶
作者: woaidd99    时间: 2015-5-31 21:26
七尺阳光 发表于 2015-5-30 22:10
第二种会直接报错的.变量a  未定义 是不能拿来使用的.你想用变量来代替数组长度的话.建议使用宏定义
#defin ...

比如说  int n = 6
             int a[n] 这种情况  为什么可以啊
             下面还有个情况:
             int n  = 0,;
             scanf("%d", &n);
             int a[n];
           这两个数组的的定义  情况类似吗   
           好像说数组的长度不能是变量吧
作者: Never_Yg    时间: 2015-5-31 21:49
七尺阳光 发表于 2015-5-30 22:10
第二种会直接报错的.变量a  未定义 是不能拿来使用的.你想用变量来代替数组长度的话.建议使用宏定义
#defin ...

厉害{:3_51:}
作者: taolove    时间: 2015-6-1 20:18
第一个属于确定了变量的值,第二个定义是想要依据你想要的储存空间的大小来分配空间,数组[]必须是常量或者常量表达式,不可以是动态的定义。
但是在被调用函数中存在第二种时又是合法的,因为被调用的函数只是临时分配储存空间,当执行结束后,就释放储存空间
作者: lyricdon    时间: 2015-6-1 21:15
你说的太好啦,点个赞!
作者: lyricdon    时间: 2015-6-1 21:24
taolove 发表于 2015-6-1 20:18
第一个属于确定了变量的值,第二个定义是想要依据你想要的储存空间的大小来分配空间,数组[]必须是常量或者 ...

应该是这样!
作者: taolove    时间: 2015-6-1 21:30
lyricdon 发表于 2015-6-1 21:24
应该是这样!

给点分就好了,嘿嘿
作者: 恩赐_RWQqZ    时间: 2015-6-1 21:52
哦,学习了...
作者: fixer    时间: 2015-6-1 22:09
第一种老师说是xcode做的优化,其它的不知道了
作者: ⒈苆都s.兲憶    时间: 2015-6-1 23:47
这个其实是不可以的,只是xcode 做了优化才可以,在其他的编译器里是不对的!
作者: talent123    时间: 2015-6-2 09:01
woaidd99 发表于 2015-5-31 21:26
比如说  int n = 6
             int a[n] 这种情况  为什么可以啊
             下面还有个情况:

第一种情况属于编译器已经知道你的n是6了。
如果你一定要这么做 可以试一下malloc函数
在标题头 #include <stdlib.h>
好像是这个
作者: 晗修    时间: 2015-6-2 09:30
数组元素个数未知的话可以声明动态数组
作者: 马贺飞    时间: 2015-6-10 13:54
数组定义时可以是变量,但如果用变量的话则不能同时进行初始化即赋值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2