【问题标题】:Struct array initialization结构体数组初始化
【发布时间】:2018-09-10 23:53:40
【问题描述】:
     struct forces{
        double fo[1];
        double ft[1];
    };
    int main(void){
        struct forces frc;
        frc.fo[0]=6;
        frc.fo[1]=56;
        frc.ft[0]=567;
       printf("%.0lf\n",frc.fo[1]);
        return 0;
    } 

请帮忙。为什么我的打印输出总是 frc.ft[0]?

【问题讨论】:

  • 欢迎来到 StackOverflow。这是 C 还是 C++?你应该告诉我们语言。除此之外,在这两种语言中,数组都是从 0 开始的,并且只包含 N 个元素。所以 int foo[5] 正好有 5 个元素,foo[0] ... f[4]。 foo[5] 不存在,frc.fo[1] 也不存在。

标签: arrays data-structures struct initialization


【解决方案1】:

根据您的声明,fo[1] 不存在,写入它是 C 和 C++ 的未定义行为。

将您的声明更改为此以使 fo[1] 成为有效元素

struct forces{
    double fo[2];
    double ft[1];
};

在 C 和 C++(以及大多数类似的语言)中,声明 foo[5] 会创建一个 5 元素数组,其有效索引值为 [0] ... [4]。 int foo[1] 只有一个有效的索引 foo[0]

在您的代码中,您看到 fo[1] 代替了 ft[0],因为您的编译器将两个双精度变量放在内存中,它们之间没有间隙(填充)。

【讨论】:

  • 谢谢。这个c代码。这是我忽略的一个常见错误。我会试一试的。
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多