本文主要介绍C语言中的memset()函数,包括memcpy()函数和memset()函数的区别。有需要的朋友可以参考一下,希望能帮到你。
:
目录
1.memset函数原型:2。使用memset函数3。将值赋给int类型1 4。打开内存5。memset给变量赋值。总结在C语言中,使用变量之前,需要对变量的值进行初始化。一个数组占用一个连续的内存块。c语言提供memset函数(头文件string.h)将数组分组赋值。(memset函数也可以给变量赋值,但是只有无聊的人才会这么做。详情见下表5)
一、memset函数原型:
void memset ( void *s,char ch,unsigned n)
功能:将一个以S为首地址的连续N字节内存单元分配给ch。
二、使用memset函数
#包含stdio.h
#包含字符串. h
int main() {
char c[10];
//将数组C的所有10个元素赋给“a”
memset(c,' a ',10);
for(int I=0;i10i ) {
printf('%c\t ',c[I]);
}
返回0;
}
输出:
啊啊啊啊啊啊啊啊
#包含stdio.h
#包含字符串. h
int main()
{
int a[10];
memset(a,0,10 * sizeof(int));
/*数组A的类型是int,一个int占用4个字节,所以a[10]实际上有40个字节。
char类型只占用1个字节,所以不需要乘以sizeof(char) */
//输出数组A和b。
for(int I=0;i10i ) {
printf('%d\t ',a[I]);
}
printf(' \ n ');
返回0;
}
输出:
0 0 0 0 0 0 0 0 0 0
emset函数用于为n个字节赋值。而char type占用1个字节。但int类型占用4个字节,所以在给int、short等类型赋值时,需要乘以字节数。
三、给int类型赋值为1
#包含stdio.h
#包含字符串. h
int main()
{
int a[10];
memset(a,1,10 * sizeof(int));
//输出数组a
for(int I=0;i10i ) {
printf('%d\t ',a[I]);
}
返回0;
}
输出:
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
从输出中可以看出,数组元素没有赋值1。为什么?这是为什么呢?
如前所述,memset给连续的N个字节赋值。但是int类型占用了4个字节。memset赋值时,数组直接分成40个字节进行赋值,四个字节不作为一个整体。
四、扒开内存
我们定义一个数组;
int a[2];
memset(a,1,2 * sizeof(int));
假设内存中的每一位都是0,定义数组,并将内存的每一位用A作为第一个地址:
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
使用memset函数为每个字节赋值1。一个字节是8位,所以数组变成
0000 0001 0000 0001 0000 0001 0000 0001
0000 0001 0000 0001 0000 0001 0000 0001
注意,当给一个数组赋值时,一个int被分成四个独立的字节。
而0000 0001 0000 0001 0000 0001 0001 0001 0000 0001十进制正好
16,843,009
五、memset给变量赋值
memset函数第一个参数是指针类型,也就是说,只要我们给他一个地址。
#包含stdio.h
#包含字符串. h
int main()
{
char a;
memset(a,' c ',1);
printf('%c\n ',a);
返回0;
}
输出:
c
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。