数组初始化问题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

原文地址:https://www.cnblogs.com/xiaokang01/p/12380119.html