啊哈磊_编程从这里起步

标题: 关于结构体数组中的数不能参与计算的问题 [打印本页]

作者: 哎呀呀    时间: 2014-3-18 19:08
标题: 关于结构体数组中的数不能参与计算的问题
如下,写了一个结构体数组,想计算出里面的数,但结果为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,为什么呢?

作者: rosynirvana    时间: 2014-3-18 19:08
哎呀呀 发表于 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维数组最为自然的情况
作者: 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'}}
    };

建议不要用这么复杂的初始化
作者: 哎呀呀    时间: 2014-3-18 19:27
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 ...

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

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

谢谢,感恩大神,哈哈




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2