1

gcc 4.4.4 c89

指针与数组不同。但是数组可以衰减为指针。

我只是使用第一个参数是指针的 memset。我想初始化我的结构数组。

IE

struct devices
{
    char name[STRING_SIZE];
    size_t profile;
    char catagory;
};

struct devices dev[NUM_DEVICES];

memset(dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));

开发 == &dev[0]

但是我应该通过第一个参数有这个:

 memset(&dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));

非常感谢您的任何建议,

4

1 回答 1

4

你有什么:

memset(dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));

很好 - 您将指针传递给数组的第一个元素,以及数组的大小。但是,(size_t)强制转换是不必要的(sizeof有 type size_t,因此会导致正确的提升),我发现这dev[0]*dev这种情况更清楚:

memset(dev, 0, NUM_DEVICES * sizeof dev[0]);

或者,您可以用作&dev地址。在这种情况下,使用可能更清楚sizeof dev- 整个数组的大小:

memset(&dev, 0, sizeof dev);

我说这更清楚,因为通常最好让第一个参数是指向sizeof作为最后一个参数的主题的类型的指针:memset()应该看起来像以下形式之一:

memset(p, ..., N * sizeof p[0])
memset(&x, ..., sizeof x)

但是请注意,最后一个只有在dev确实是一个数组时才有效 - 就像在这种情况下一样。相反,如果您有指向数组第一个元素的指针,则需要使用第一个版本。

于 2010-08-13T05:01:26.273 回答