搜索
查看: 758|回复: 4
打印 上一主题 下一主题

关于结构体数组中的数不能参与计算的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-18 19:08:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
如下,写了一个结构体数组,想计算出里面的数,但结果为1,WHY?
-----------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct stu{
    int a;
    int b;
    char c;
    };
    struct stu abc[2][3]={
    {1,2,'a'},{2,3,'b'},{3,4,'c'},
    {10,20,'d'},{20,30,'e'},{30,40,'f'}
    };
    int i=0,k=0;
    for(i=0;i<3;i++)
  k+=abc[0][i].a;
    printf("%d\n",k);
system("pause");
return 0;
}
-------------------------------------------------------------------------------------------
我原来觉得随着i的增加,应该取到1.2.3三个值,结果为6才对,但结果为1,为什么呢?

最佳答案

查看完整内容

数量少就一个个去写 struct foo one = {1, 2, 'a'}; struct foo two = {2, 3, 'b'}; …… 主要原因是,手写容易出错,少了一个大括号就会出错。另外编译器对这东西的实现不怎么好(不怎么符合ISO C的标准,因为标准关于初始化这段本身就太复杂了) 数量多了肯定不能写成字面值了,一般从外部读取 3维数组应该在设计上加以避免 我印象中没有遇到过3维数组最为自然的情况
沙发
发表于 2014-3-18 19:08:26 | 只看该作者
哎呀呀 发表于 2014-3-18 19:27
那如何初始化结构数组?
还有三维数组我也一直在采用这种方法初始化,有什么好的方法吗?谢谢

数量少就一个个去写

struct foo one = {1, 2, 'a'};
struct foo two = {2, 3, 'b'};
……

主要原因是,手写容易出错,少了一个大括号就会出错。另外编译器对这东西的实现不怎么好(不怎么符合ISO C的标准,因为标准关于初始化这段本身就太复杂了)
数量多了肯定不能写成字面值了,一般从外部读取


  1. for(i=0; i<len_x; ++i)
  2.   for(j=0; j<len_y; ++j)
  3.      scanf("%d %d %d", &bar[i][j].a, &bar[i][j].b, &bar[i][j].c);
复制代码


3维数组应该在设计上加以避免
我印象中没有遇到过3维数组最为自然的情况
板凳
发表于 2014-3-18 19:25:02 | 只看该作者
struct stu abc[2][3]={
    {{1,2,'a'},{2,3,'b'},{3,4,'c'}},
    {{10,20,'d'},{20,30,'e'},{30,40,'f'}}
    };

建议不要用这么复杂的初始化
地板
 楼主| 发表于 2014-3-18 19:27:21 | 只看该作者
rosynirvana 发表于 2014-3-18 19:25
struct stu abc[2][3]={
    {{1,2,'a'},{2,3,'b'},{3,4,'c'}},
    {{10,20,'d'},{20,30,'e'},{30,40,'f ...

那如何初始化结构数组?
还有三维数组我也一直在采用这种方法初始化,有什么好的方法吗?谢谢
5#
 楼主| 发表于 2014-3-18 21:00:28 | 只看该作者
rosynirvana 发表于 2014-3-18 19:59
数量少就一个个去写

struct foo one = {1, 2, 'a'};

谢谢,感恩大神,哈哈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表