【问题标题】:which is best way to initialize array, "memset" or " {//value} "?哪个是初始化数组、“memset”或“{//value}”的最佳方法?
【发布时间】:2020-10-07 06:01:12
【问题描述】:
int main(){

int ar[50]={1};

//OR

int br[50];

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

return 0;

}

【问题讨论】:

标签: c++ arrays stl


【解决方案1】:
int ar[50]={1};

这只会将第一个元素设置为1。其余的将是0

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

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

{16843009, 16843009, 16843009, 16843009, 16843009}

当你知道你真的需要它时,使用memset。它并不完全用于初始化数组,它只是将内存设置为特定值。

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 样式的数组。

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

参考:
[1] : Array Initialization
[2]:memset doc

【讨论】:

    【解决方案2】:

    假设你这样做

    int ar[50] = {-1};
    

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

    请参阅此Initialization of all elements of an array to one default value in 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
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2018-03-09
      • 2011-11-24
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多