【问题标题】:Initialise 2 dimensional array of struct with all values zeroed初始化结构的二维数组,所有值都归零
【发布时间】:2014-01-02 04:32:46
【问题描述】:

首先我应该说我的 C 经验很少,当我说的很少时,我的意思是大约 2 1/2 小时。因此,请原谅并纠正任何不准确、愚蠢或其他个人失误。

这是目前的代码:

typedef struct
{
    float n;
    int x;
    int y;
    int values[5];
} Cell;

typedef Cell Grid[10][10];

void update(Grid *source)
{
    // This should be a 2D array of Cells.
    // All the values in the Cell should be 0,
    // including the contents of the values array.
    Grid grid;
}

更新将被相当频繁地调用,并且对性能有一定的要求,因此如果需要为了性能,我愿意牺牲一些可读性/简单性/编码时间。不,这不是过早的优化。

感谢您的帮助,

山姆。

【问题讨论】:

    标签: c arrays performance struct


    【解决方案1】:

    最简单最快的方法是memset数组:

    memset(grid, 0 sizeof(Cell)*10*10);
    

    grid 的实际大小在编译时是已知的,所以

    memset(grid, 0, sizeof(Grid));
    

    应该够了。

    【讨论】:

    • 谢谢,这似乎是这个问题的最佳答案,我会这样标记它。碰巧我已经尝试过这个并得出结论它不起作用,但经过进一步调查,代码表现出的错误行为似乎来自另一个未知来源。我现在会继续独立调查。
    【解决方案2】:

    这将初始化您的数组。

    Grid grid={0};
    

    【讨论】:

    • 这样做的问题是,在某些常用警告级别(例如-Wall)下的某些版本的 GCC 会抱怨“初始化程序不完整”。不应该,但确实如此。
    • @JonathanLeffler 是的。我尝试了几个编译器。我工作得很好。但是,正如您所说,它不应该发出警告。
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2020-09-29
    • 1970-01-01
    • 2021-02-03
    • 2012-11-29
    相关资源
    最近更新 更多