簡體   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