繁体   English   中英

哪个是初始化数组、“memset”或“{//value}”的最佳方法?

[英]which is best way to initialize array, “memset” or “ {//value} ”?

int main(){

int ar[50]={1};

//OR

int br[50];

memset(br, 1, sizeof(br)); 

return 0;

}

假设你这样做

int ar[50] = {-1};

现在你会期望这条线用 -1 初始化所有的数组元素,但它不会。 它只会将数组的第一个元素设置为 -1 并将 rest 设置为 0。而 memset 将显示预期的行为。

在 C++ 中看到将数组的所有元素初始化为一个默认值? 了解更多信息。

让我们举个例子:-

int arr[5] = { 1, 2 }; // this will initialize to 1,2,0,0,0



int ar[5] = {  }; // this will  initialize  all elements 0



int myArray[10] = {}; // his will also all elements 0 in C++ not in c

因此,如果要将特定值初始化为数组,请使用 memset()。

如果要将数组中的所有元素初始化为 0,请使用

static int myArray[10]; // all elements 0

因为如果没有指定初始化程序,具有 static 存储持续时间的对象将初始化为 0,并且它比 memset() 更便携。

此外, int ar[50]={0}; 将是无限的,因为它只是初始化数组并且没有结尾,但是在memset(arr,0,sizeof(br))中,它具有在 arrays 中结束循环的正确方法

int ar[50]={1};

这只会将第一个元素设置为1 Rest 都将为0

memset(br, 1, sizeof(br));

这会将br中的所有字节设置为 1。这与将所有值设置为1不同。 之后的值是:

{16843009, 16843009, 16843009, 16843009, 16843009}

当你知道你真的需要它时使用memset 它并非完全用于初始化 arrays,它只是将 memory 设置为特定值。

C++ 中的最佳方法? 使用std::fillstd::fill_n

例子:

int array[5];
std::fill(array, array + 5, 8);

数组现在包含:

{8, 8, 8, 8, 8}

使用fill_n

std::fill_n(array, 5, 99);

数组现在包含:

{99, 99, 99, 99, 99}

作为旁注,更喜欢使用std::array而不是 c 样式的 arrays。

试穿godbolt: https://godbolt.org/z/DmgTGE

参考:
[1]: 数组初始化
[2]: memset 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM