gcc 4.4.4 c89
指针与数组不同。但是数组可以衰减成指针。
我刚刚使用memset,第一个参数是指针。我想初始化我的结构数组。
即
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 ==& dev [0]
但是我应该传递第一个参数吗:
memset(&dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));
非常感谢任何建议,
答案 0 :(得分:4)
你有什么:
memset(dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));
没问题 - 您将指针传递给数组的第一个元素以及数组的大小。但是,(size_t)
强制转换是不必要的(sizeof
类型为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
确实是数组时才有效 - 就像在这种情况下一样。如果你有一个指向数组第一个元素的指针,你需要使用第一个版本。