數組初始化問題calloc和memset+malloc


calloc = malloc+memset 但是推薦calloc
calloc分配內存,也初始化
malloc只分配內存,不初始化
memset只能用來初始化


在刷題中對數組初始化
int arr[10] = {0}//10可能是個很大的值,提交不對
要么利用循環進行初始化
要么用calloc或者malloc+memset
推薦使用calloc


calloc 在stdlib.h的頭文件中
calloc原型

void *calloc(size_t nitems, size_t size),
nitems -- 要被分配的元素個數,
size -- 元素的大小。

// 用法 動態分配一個數組,數組有10個int型元素,每個都是0
int *arr = (int *) calloc(10, sizeof(int))


memset在string.h中
void *memset(void *str, int c, size_t n)
str -- 指向要填充的內存塊。
c -- 要被設置的值。該值以 int 形式傳遞,但是函數在填充內存塊時是使用該值的無符號字符形式。
n -- 要被設置為該值的字節數。


用法
int *arr = new int[10]; // 動態
或者
int arr[10]; //靜態分配數組
// 將數組所有元素初始化為0
memset(arr,0,sizeof(int)*10);

int *arr2 = (int *)malloc(sizeof(int)*10);// 動態分配10個int的空間
memset(arr2, 0,sizeof(int)*10); // 給10個int初始化為0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM