结构数组初始化

时间:2018-09-10 23:53:41

标签: arrays data-structures struct initialization

     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]?

1 个答案:

答案 0 :(得分: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],因为编译器将两个double变量放到了内存中,并且它们之间没有间隙(填充)。