黑马程序员技术交流社区

标题: 结构体数组问题!!求正解!! [打印本页]

作者: FlyTrem    时间: 2014-4-18 19:09
标题: 结构体数组问题!!求正解!!
  1. #include<stdio.h>
  2. #include<string.h>

  3. int jishu();
  4. int main()
  5. {
  6.         struct str
  7.         {
  8.                 char a[20];
  9.                 int no;

  10.         };
  11.         char a[20]="a1", b[20]="b1", c[20]="c1", d[20]="d1", e[20]="e1", f[20]="f1";

  12.         int sum1 = jishu(a);
  13.         int sum2 = jishu(b);
  14.         int sum3 = jishu(c);
  15.         int sum4 = jishu(d);
  16.         int sum5 = jishu(e);
  17.         int sum6 = jishu(f);
  18.        
  19.         struct str d1;
  20.         struct str z[6] = { { a, sum1 }, { b, sum2 }, { c, sum3 }, { d, sum4 }, { e, sum5 }, { f, sum6 } };
  21.         printf("%s", z[0].a);
  22.         return 0;
  23. }

  24. int jishu(char a[])
  25. {
  26.         int sum = 0;
  27.         for (int i = 0; i < strlen(a); i++)
  28.         {
  29.                 sum = sum + a[i];
  30.         }
  31.         printf("%d\n", sum);
  32.         return sum;
  33. }
复制代码

为什么将数组放入结构体数组中,输出的结构并不是自己想要的!
作者: Freedam    时间: 2014-4-19 23:21
代码这样修改一下就能正确输出了
  1. #include<stdio.h>
  2. #include<string.h>

  3. int jishu();
  4. int main()
  5. {
  6.         struct str
  7.         {
  8.                 char a[20];
  9.                 int no;

  10.         };
  11.         char a[20]="a1", b[20]="b1", c[20]="c1", d[20]="d1", e[20]="e1", f[20]="f1";

  12.         int sum1 = jishu(a);
  13.         int sum2 = jishu(b);
  14.         int sum3 = jishu(c);
  15.         int sum4 = jishu(d);
  16.         int sum5 = jishu(e);
  17.         int sum6 = jishu(f);



  18.         struct str d1;
  19.         struct str z[6] = { { "a1", sum1 }, { "b1", sum2 }, { "c1", sum3 }, { "d1", sum4 }, { "e1", sum5 }, { "f1", sum6 } };
  20.         printf("%s", z[0].a);

  21.         return 0;
  22. }

  23. int jishu(char a[])
  24. {
  25.         int sum = 0;
  26.         for (int i = 0; i < strlen(a); i++)
  27.         {
  28.                 sum = sum + a[i];
  29.         }
  30.         printf("%d\n", sum);
  31.         return sum;
  32. }
复制代码


原因我测试了一下,是字符数组给字符数组间赋值出现了问题。
如果按照原来的赋值方式就是
struct str z[6] = { { a, sum1 }, { b, sum2 }, { c, sum3 }, { d, sum4 }, { e, sum5 }, { f, sum6 } };
虽然在语法上没错但是转换一下就成了如下所示
z[0]    char a[20] = a;
          int no = sum1;   
z[1]    char a[20] = b;
          int no = sum2;
.........
..........
以此类推直到最后。
首先看到int no = sum1;这样赋值可以。但是char a[20] = a;这样赋值有错误。这样赋值编译可运行。但是a数组在初始化的时候接收到的只是a数组的首地址并不是将a数组赋值成“a1”。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2