C语言数组定义时不初始化为什么会报错
先定义intages[5];或intages[];再一个一个赋值是可以的,但是这样赋值ages={11,22,33,21,15};编译器会报错呢?为什么,能讲下原理吗?...
先定义int ages[5];或int ages[ ];
再一个一个赋值是可以的,但是这样赋值ages = {11,22,33,21,15};
编译器会报错呢?
为什么,能讲下原理吗? 展开
再一个一个赋值是可以的,但是这样赋值ages = {11,22,33,21,15};
编译器会报错呢?
为什么,能讲下原理吗? 展开
5个回答
展开全部
语句int ages[5]
在内存中分配了一个地址然后指向ages
所以ages 是一个地址,等价于ages[0]
但是在最初的声明的时候,可以同时赋值,这个是由编译器完成的
但声明之后
ages 就代表了ages [0]
所以只有存储一个值,而不是数组
在内存中分配了一个地址然后指向ages
所以ages 是一个地址,等价于ages[0]
但是在最初的声明的时候,可以同时赋值,这个是由编译器完成的
但声明之后
ages 就代表了ages [0]
所以只有存储一个值,而不是数组
追问
我是先定义了,再想一次赋值所有元素。这跟指针有关系吗?哦,数组名代表地址而且和第一个数组元素内存地址是一样的吧?我直接写ages = {.....};
编译器会默认认为我在操作ages[0]的那块内存吗?
追答
对的,是操作操作ages[0]的那块内存
如果你想再次赋值的话,不能用静态复制,只有动态赋值
用循环结构
展开全部
这是数组的定义 初始化。
int ages[5]={11,22,33,21,15};
你先定义了 然后在赋值的话 要带下标。
像你这样的 是错误的
你要是想在定义了后 在另 外给赋值 需要 一个一个赋值(下标)
要想一起赋值 for(int i=0;i<5;i++)
scanf("%d",ages[i]);
其实这也是一个一个的给数组 赋值 同样也是带有下标的赋值
所以你要是想 以初始化的方式 赋值的话 就需在定义后赋值
不然就是带有下标的赋值。
int ages[5]={11,22,33,21,15};
你先定义了 然后在赋值的话 要带下标。
像你这样的 是错误的
你要是想在定义了后 在另 外给赋值 需要 一个一个赋值(下标)
要想一起赋值 for(int i=0;i<5;i++)
scanf("%d",ages[i]);
其实这也是一个一个的给数组 赋值 同样也是带有下标的赋值
所以你要是想 以初始化的方式 赋值的话 就需在定义后赋值
不然就是带有下标的赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组名是数组的首地址,就是一个指针的大小,所以单独拿出来赋值是不合理的
追问
为什么我把数组当参数传给函数,在函数里操作,形参的大小就一直是8个字节,这跟指针有关系吗?如果那个首地址只有一个指针那么大,那不是只有一个字节?
为什么把数组当做参数传给一个函数的话,为什么不会默认我传得时ages[0]呢?而且调用函数时为什么是functionName(数组名);
而不是functionName(数组名[空/个数]);
也不能在函数内部操作数组(如在函数内计算数组元素个数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这么做代表的就不是一个数组了,int没有,整型也算不上,当然不可以
追问
我是先定义了,再全部赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写错了,应该是int ages[] = {11,22,33,21,15};
追问
我是先定义了,再全部赋值。
追答
那就只能一个一个元素的赋值了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询