malloc calloc memset的使用

malloc calloc 头文件 <stdlib.h>

malloc

原型:malloc(size * sizeof(类型));

int *p;

p=(int *)malloc(100*sizeof(int)); //数组有100元素,每个元素是int类型,元素大小sizeof(int)


calloc
原型:calloc(size,sizeof(类型));
p=(int *)calloc(100,sizeof(int));//数组有100元素,每个元素是int类型,元素大小sizeof(int)
-----------------------------

memset  头文件 <memory.h>
原型:memset(数组名,0或-1,sizeof(数组名));
int q[10];
memset(q,0,sizeof(q)); //初始化的数组名为q,初始化为0,sizeof(q)表示数组总大小,sizeof(数组名)

#include<stdio.h>
#include<stdlib.h> 
#include<memory.h>
const int n=10;
int main()
{
	int *p;
	p=(int *)malloc(n*sizeof(int));//malloc
	int i;
	printf("使用malloc分配,数组中值任意:\n");
	for(i=0;i<n;i++)
	{
		printf("%d\n",p[i]);
	} 
	printf("------------------------\n");
	free(p);
	printf("使用calloc分配,数组值初始化为0:\n");
	p=(int *)calloc(10,sizeof(int));
	for(i=0;i<n;i++)
	{
		printf("%d\n",p[i]);
	} 
	printf("------------------------\n");
	printf("使用memset,只能为已知大小数组初始化,初始值限定为0或-1:\n");
	int q[n];
	memset(q,-1,sizeof(q));
	for(i=0;i<n;i++)
	{
		printf("%d\n",q[i]);
	}
	return 0; 
}    
    


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`memset()` 函数是 C 和 C++ 中的标准库函数,用于将内存块设置为特定值。这个函数通常用于初始化数据结构、数组等。其原型在 `<cstring>` 或者 `<cstdlib>` 标准头文件中。 下面是一个 `memset()` 的简单示例: ```c #include <stdio.h> #include <string.h> int main() { char str[50]; // 使用 memset 将字符串 str 设置为 'A' memset(str, 'A', sizeof(str) - 1); // 最后添加 '\0' 终止符,并打印结果字符串 str[sizeof(str)-1] = '\0'; printf("Str initialized with 'A': %s\n", str); return 0; } ``` 在这个示例中,我们首先包括了 `<stdio.h>` 和 `<string.h>` 这两个标准头文件。然后声明了一个字符数组 `str` ,用于存储一系列字符。 接下来,调用 `memset(str, 'A', sizeof(str) - 1)`。这里传入三个参数: 1. 要填充的内存区域地址 (`str`) 2. 想要填充的值 (`'A'`) 3. 需要填充多少字节 (`sizeof(str) - 1`),这表示从 `str` 开始到倒数第二个元素都设为 `'A'` 最后,为了使得 `str` 成为有效的字符串(拥有终止符 `\0`),我们在最后一次赋值操作时手动添加了 `\0` 到最后一个元素。 当你运行此程序时,会看到输出 `Str initialized with 'A': AAA...A` (实际上输出的内容取决于实际数组大小,示例中假设大小至少允许显示几个字母 `A`)。这是 `memset` 函数工作效果的直接体现——它将指定大小的区域内所有元素填充为指定值。 --- ## 相关问题: 1. `memset()` 函数是否能处理非字符串类型的数组? 2. `memset()` 和 `calloc()`、`malloc()` 有何区别? 3. 如何安全地使用 `memset()` 来防止内存错误?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值