C语言二维数组赋值问题

题目如上,我写的程序如下:#include<stdio.h>voidmain(){inti,j,sum,a[5][3];doubleb[3],aver,sun=0;a[5... 题目如上,我写的程序如下:
#include <stdio.h>
void main()
{
int i, j, sum, a[5][3];
double b[3], aver, sun=0;
a[5][3] = {{80, 75, 92}, {61, 65, 71}, {59, 63, 70}, {85, 87, 90}, {76, 77, 85}};
for(i=0; i<3; i++)
{
sum = 0;
for(j=0; j<5; j++)
{
sum = sum+a[j][i];
}
b[i] = sum/5.0;
}
printf("各科平均成绩如下:\n");
for(i=0; i<3; i++)
{
printf("%8.1lf", b[i]);
}
printf("\n");
for(i=0; i<3; i++)
{
sun = sun+b[i];
}
aver = sun/3;
printf("总平均成绩:%8.1lf\n", aver);
}
提示的问题如下:

而我改为将a[5][3]在声明时初始化就正常运行,这是什么问题
#include <stdio.h>
void main()
{
int i, j, sum;
double b[3], aver, sun=0;
int a[5][3] = {{80, 75, 92}, {61, 65, 71}, {59, 63, 70}, {85, 87, 90}, {76, 77, 85}};
for(i=0; i<3; i++)
{
sum = 0;
for(j=0; j<5; j++)
{
sum = sum+a[j][i];
}
b[i] = sum/5.0;
}
printf("各科平均成绩如下:\n");
for(i=0; i<3; i++)
{
printf("%8.1lf", b[i]);
}
printf("\n");
for(i=0; i<3; i++)
{
sun = sun+b[i];
}
aver = sun/3;
printf("总平均成绩:%8.1lf\n", aver);
}
展开
 我来答
dufenglei908
推荐于2018-05-07 · TA获得超过6372个赞
知道大有可为答主
回答量:1449
采纳率:60%
帮助的人:772万
展开全部
声明的时候赋值是对整个数组的赋值,这是编译器特性
而声明以后再对a[5][3]赋值实际就是在对第六行第四列的单个元素进行赋值,先不说这个越界,对单个元素进行数组数据的赋值本身就是一个错误
所以,如果你要在声明以后再赋值的话,那么必须一个元素一个元素的赋值
zhw410
2012-11-29 · 超过24用户采纳过TA的回答
知道答主
回答量:52
采纳率:100%
帮助的人:39.1万
展开全部
数组不能被直接这样赋值的,初始化可以,赋值只能通过指针或者单个元素赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luneng8183
2012-11-29 · TA获得超过902个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:514万
展开全部
首先,除非在变量声明时,a[5][3]是指明数组名为a,大小为5x3,此时可以初始化,给数组整体赋值;

在程序中,单独使用a[5][3]是指数组a中一元素,但因数组a大小为5x3,所以下标最大元素为a[4][2],因此编译报错;

希望上述对您有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cqpcy
2012-11-29 · TA获得超过658个赞
知道小有建树答主
回答量:746
采纳率:66%
帮助的人:364万
展开全部
a[5][3]= 其实就是在给最后一个赋值
并不是数组的初始地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式