memset()函数用于字符型、整型数组的初始化详解
创作时间:
作者:
@小白创作中心
memset()函数用于字符型、整型数组的初始化详解
引用
CSDN
1.
https://blog.csdn.net/wyqxii/article/details/136521761
在C/C++编程中,memset函数是一个非常常用的内存操作函数,主要用于将一块内存区域设置为特定的值。本文将详细介绍memset函数在字符型和整型数组初始化中的应用,帮助读者更好地理解和使用这个函数。
在开始介绍memset()
函数前,我们需要知道char
类型和int
类型的相互关系。
char
是一种字符类型,用来表示单个字符。每个字符占用一个字节的内存空间。int
是一种整数类型,用来表示整数。每个整数占用四个字节的内存空间。- 而
char
类型实际上是一种特殊的整数类型(但所占内存更小,数据范围更小),它可以通过ASCII码与整数联系,例如:
char ch1 = 65; //A的ASCII码为65(十进制数)
printf("%c",ch1); //输出为A
char ch2 = 'B'; //B的ASCII码为66
printf("%d",ch2); //输出为66
int num = 65;
printf("%c",num); //输出为A
输出表明,int
型的数据能够以字符的格式输出,且该int
型的数据恰好是输出字符的ASCII码。
memset()函数说明
//头文件
#include<string.h> //c中
#include<cstring> //c++中
//声明
void *memset(void *str, int c, size_t n)
解释 :从地址str
开始,将n
个字节长度的内存全部赋值为c
(注意是每一个字节都赋值为c
)。根据前文的分析,我们可以视c
等于所赋字符的十进制ASCII码。即认为 c
是字符类型。
该函数的一般使用方法如下(在本例中,证明了c
能够被视为字符类型):
#include <stdio.h>
#include <string.h>
int main (){
char str[50];
strcpy(str,"This is string.h library function");
puts(str);
memset(str,36,7);
/*
'$'的ASCII码为36
该语句的作用是:把字符数组str中的前7个字符都赋值为'$'
该语句也可以写为:memset(str,'$',7);
*/
puts(str);
return(0);
}
运行以上程序,得到以下结果:
This is string.h library function
$$$$$$$ string.h library function
memset函数用于数组初始化
1.字符串数组初始化
一般来说,字符串数组的初始化,就是让字符串数组为空。
memset(str,'/0',sizeof(str));
2.int型数组初始化
需要注意的是:memset
赋值时是按字节赋值。因此用memset
函数对int
型数组初始化时,可能会造成赋值错误。
例如对于int
型数组a
,我们尝试使用memset
将数组中的元素都赋值为100
,即:
int main(){
int a[3];
memset(a,100,sizeof a);
printf("%d",a[0]);
//输出结果为1684300900
return 0;
}
输出结果为1684300900
,这与我们希望得到的结果截然不同。接下来我们将分析该结果产生的原因:
100
表示:内存中每个字节都赋予ASCII码为100
的字符。我们将十进制数100
转化为十六进制,得到0x64
(0x为十六进制前缀)。则memset(a,100,sizeof a)
表示:将目标内存中的每个字节都赋为0x64
。- 如上图所示,由于
a
为int
型数组,每个元素占四个字节的内存空间。由于每个字节都被赋值为0x64
,因此每个int
型元素的值都为0x64646464
。将其转化为十进制,得到输出结果1684300900
。
那么,memset函数是否不适用于所有int型数组的初始化?显然不是。在实际运用中,我们一般使用memset函数初始化int型数组为0、-1或无穷大,分析如下:
memset(a,-1,sizeof(a));
//-1的十六进制为0xff,则每个数组元素赋值为0xffffffff,即十进制 -1
memset(a,0,sizeof(a));
//-1的十六进制为0x00,则每个数组元素赋值为0x00000000,即十进制 0
memset(a,0x3f,sizeof(a));
//-1的十六进制为 0x3f,则每个数组元素赋值为0x3f3f3f3f,即十进制1061109567,数量级为10^9,与0x7fffffff一个量级。而0x7fffffff是int类型的最大值,即2^31-1=2147483647
//因此0x3f3f3f3f可以近似认为是int类型的无穷大
热门推荐
春节档电影上演“神仙打架”,影院迎来观影热潮
新研究指宠物犬能用音板拼出具意义的两字组合:首次与人类“交谈”
你的猫正在窃听
舌尖上的中国教你挑选最新鲜的食材
G型布局:打造高效烹饪空间的秘诀
呼朋唤友的动物界奇趣:谁是真正的社交达人?
有趣且不寻常的动物防御机制
新市场 新动能 新网络——全球商业领袖在港纵论“投资中国”
冬季取暖神器:空调辅热功能大揭秘!
冬天来了!空调辅热让你秒变暖宝宝
空调辅热,让你的办公室暖如春
暑期遛娃新宠:太湖龙之梦乐园全攻略
在家也能做出地道��莆田焖豆腐
莆田焖豆腐:一道承载乡愁的美味佳肴
莆仙焖豆腐:一道承载乡愁的传统美食
592岁盐步老龙出水!南海大沥端午龙舟季系列活动拉开序幕
AI+大数据:科技融合的新纪元
IBM报告:AI时代的职业技能提升之道
范伟与蔡明:从春晚到影视界的华丽转身
陈佩斯:离开春晚后的艺术人生
郭达:从春晚“钉子户”到家庭英雄
打旅居牌的江南小城,看中不上班的数字游民
重庆南开中学:体育精神与学术实力双丰收
重庆南开中学:从张伯苓到新时代教育典范
张伯苓与重庆南开中学:体育精神的百年传承
重庆南开中学“四有·五品”金课工程:创新教学模式的典范
重庆南开中学:百年名校的体育教育传承
高速车道限速标准及安全行驶规范
麗水市三天行程:探索韓國海岸寶石
大理南诏故都:一座见证西南千年沧桑的古城