C语言数组定义时不初始化为什么会报错

先定义intages[5];或intages[];再一个一个赋值是可以的,但是这样赋值ages={11,22,33,21,15};编译器会报错呢?为什么,能讲下原理吗?... 先定义int ages[5];或int ages[ ];
再一个一个赋值是可以的,但是这样赋值ages = {11,22,33,21,15};
编译器会报错呢?
为什么,能讲下原理吗?
展开
 我来答
九下兮兮
推荐于2016-08-03 · 超过14用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:35.8万
展开全部
语句int ages[5]
在内存中分配了一个地址然后指向ages
所以ages 是一个地址,等价于ages[0]
但是在最初的声明的时候,可以同时赋值,这个是由编译器完成的
但声明之后
ages 就代表了ages [0]
所以只有存储一个值,而不是数组
追问
我是先定义了,再想一次赋值所有元素。这跟指针有关系吗?哦,数组名代表地址而且和第一个数组元素内存地址是一样的吧?我直接写ages = {.....};
编译器会默认认为我在操作ages[0]的那块内存吗?
追答
对的,是操作操作ages[0]的那块内存

如果你想再次赋值的话,不能用静态复制,只有动态赋值
用循环结构
这不是重点灬
2014-07-07 · 超过16用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:32.6万
展开全部
这是数组的定义 初始化。
int ages[5]={11,22,33,21,15};

你先定义了 然后在赋值的话 要带下标。

像你这样的 是错误的

你要是想在定义了后 在另 外给赋值 需要 一个一个赋值(下标)

要想一起赋值 for(int i=0;i<5;i++)
scanf("%d",ages[i]);

其实这也是一个一个的给数组 赋值 同样也是带有下标的赋值

所以你要是想 以初始化的方式 赋值的话 就需在定义后赋值

不然就是带有下标的赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
素笔描靑花
2014-07-07 · 超过18用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:26万
展开全部
数组名是数组的首地址,就是一个指针的大小,所以单独拿出来赋值是不合理的
追问
为什么我把数组当参数传给函数,在函数里操作,形参的大小就一直是8个字节,这跟指针有关系吗?如果那个首地址只有一个指针那么大,那不是只有一个字节?
为什么把数组当做参数传给一个函数的话,为什么不会默认我传得时ages[0]呢?而且调用函数时为什么是functionName(数组名);
而不是functionName(数组名[空/个数]);
也不能在函数内部操作数组(如在函数内计算数组元素个数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘零丶亦自流
2014-07-07
知道答主
回答量:9
采纳率:0%
帮助的人:1.2万
展开全部
你这么做代表的就不是一个数组了,int没有,整型也算不上,当然不可以
追问
我是先定义了,再全部赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beddy1
2014-07-07 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2212万
展开全部
写错了,应该是int ages[] = {11,22,33,21,15};
追问
我是先定义了,再全部赋值。
追答
那就只能一个一个元素的赋值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式