簡體   English   中英

memset中的第一個參數傳遞數組或指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM