C语言:memset()用法

memset()用于初始化工作,常为新申请的内存进行初始化工作,直接操作内存空间。

函数原型:

#include<string.h>	//要包含这个头文件
void *memset(void* s, int c, unsigned long n);

函数功能:将指针变量s所指向的前n个字节的内存单元用一个“整数”c替换,可以为任何数据类型的数据进行初始化。常用于对数组或结构体进行清零初始化。

函数参数:

  • svoid *型的指针变量,可以为任何类型的数据进行初始化
  • cint类型的变量,常为0,为char类型的数据初始化时,使用0就相当于使用\0初始化
  • n:一般用sizeof()获取

Attention
memset函数赋值时以字节为单位

示例1:对int型数组初始化

#include <stdio.h>
#include <string.h>

int main(){
	
	int x[5];
	memset(x, 1, sizeof(x));
	for(int i=0; i<5; i++){
		printf("%d\t", x[i]);
	}
	return 0;
} 

输出结果:

16843009	16843009	16843009	16843009	16843009

已知int类型占据内存4个字节,所以当使用memset函数赋值1时,int类型数组中每个元素的值为(0000000)1000000010000000100000001共32位,转换位10进制为16843009。
所以对int型这样的占据多个字节的元素赋值时,得到的值要自己算一下才能明白。

示例2:对char类型数组初始化

#include<stdio.h>
#include<string.h>
int main(){
	
	char str[5];
	memset(str, 1, sizeof(str));
	for(int i=0; i<5; i++){
		printf("%d\t", str[i]);
	}
	return 0;
}

输出结果:5个1

1	1	1	1	1

char类型数据占据内存1个字节,所以char类型数组中每个元素被赋值为00000001,转换为10进制为1。

示例3:对int/char型变量初始化

#include<stdio.h>
#include<string.h>
int main(){
	
	int x;
	char c;
	memset(&x, 1, sizeof(x));
	memset(&c, '1', sizeof(c));
	printf("%d\t%c", x, c);
	
	return 0;
}

输出结果:

16843009	1

示例4:对结构体初始化

#include<stdio.h>
#include<string.h>
int main(){

	struct student{
		int ID;
		char name[20];
	}stu;
	memset(&stu, 0, sizeof(stu));
	//或memset(&stu, 0, sizeof(struct student));
	printf("%d\t%s", stu.ID, stu.name);
	return 0;
}

示例5:对结构体数组初始化

#include<stdio.h>
#include<string.h>
int main(){

	struct student{
		int ID;
		char name[20];
	};
	
	struct student stus[10];
	
	memset(stus, 0, sizeof(stus));
	//或memset(stus, 0, sizeof(stus));
	printf("%d\n", stus[0].ID);
	printf("%s", stus[0].name);
	return 0;
}

参考链接:

  1. memset函数及其用法,C语言memset函数详解
  2. 转载memset函数详细说明
  3. C语言–memset结构体初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值