【问题标题】:Error in initializing structure variables初始化结构变量时出错
【发布时间】:2017-02-07 16:05:13
【问题描述】:

好的,这实际上不是我正在编写的代码。这是一个过于简化的代码提取,会产生完全相同的错误。因此,我想如果我可以了解为什么我会在简化代码中出现错误,那么我可以将它应用到我的实际代码中。感谢您提前提供任何帮助/建议!

#include <stdio.h>
int main()
{
    struct fruit
    {
       int apples; 
       int oranges;
       int strawberries;
    };

    int x;
    int y;
    int z;

    x = 1;
    y = 2;
    z = 3;

    struct fruit apples = x;
    struct fruit oranges = y;
    struct fruit strawberries = 4;

    printf("The value is %d or %d", fruit.apples,fruit.strawberries);

    return 0;
}

【问题讨论】:

  • 这里有so很多错误:看来最好的做法是读一本好书。 K & R 是无与伦比的恕我直言。
  • struct fruit fruit = {x, y, 4};
  • 我实际上正在使用“C 编程语言”一书大声笑。他们也用 int 值初始化了一个结构。
  • K&R 是一本可怕的、完全过时的书,完整或错误以及糟糕的编程习惯。但是,如果您阅读第 6 章有关结构的内容,您会大笑:“ANSI 标准所做的主要更改是定义结构分配 - 结构可以被复制和分配,传递给函数,并由函数返回。这已经大多数编译器多年来一直支持,但现在精确定义了属性。现在也可以初始化自动结构和数组。”哇!未来就在这里!我要得到这个 ANSI C 东西的副本!

标签: c struct initialization initializer


【解决方案1】:

首先,无论如何,您都不能使用int 值初始化struct 类型变量,您必须使用大括号括起来的初始化程序,或者显式初始化每个成员。

也就是说,

struct fruit applies 
struct fruit oranges 
struct fruit strawberries 

不是您定义struct fruit 类型变量并访问成员的方式。正确的方法是

 struct fruit f;
 f.apples = x;
 f.oranges = y;
 f.strawberries= 4;

或者,更准确的说法,

  struct fruit f = {x,y,4};

或者,甚至减少中间变量,

  struct fruit f = {1,2,4};     

【讨论】:

【解决方案2】:

使用这个:

 struct fruit fruit;

 fruit.apples = {x};
 fruit.oranges = {y};
 fruit.strawberries = {4};

struct fruit fruit = {x, y, 4};

【讨论】:

    【解决方案3】:

    执行此操作的正确语法是:

    struct fruit f;
    f.apples = 1;
    f.oranges = 2;
    f.strawberries = 3;
    

    或使用直接初始化:

    struct fruit f = {1, 2, 3};
    

    或在 C99 以上,使用指定的初始化器:

    struct fruit f = {
        .apples = 1,
        .oranges = 2, 
        .strawberries = 3,
    };
    

    【讨论】:

    • 注意:成员变量名是为了说明,不要假设只使用首字母。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多