[英]first parameter in memset passing array or pointer
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));
非常感謝您的任何建議,
你有什么:
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
確實是數組的情況下,這最后一個才有效-就像在這種情況下一樣。 相反,如果您有一個指向數組第一個元素的指針,則需要使用第一個版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.