关于memset()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于memset()相关的知识,希望对你有一定的参考价值。
用memset()将一个数组初始化为0,其中0的功能与向数组填入NULL或'\0'是不是一样的?
数组是不是必须初始化?
int a[256]=0;
则数组内全部数字自动初始化为0,即一开始数组内所有元素的值为0
如果这样声明
int a[256];
则数组没有初始化,则开始时数组内的数字可以是任意值。
注意不是楼上所说,memset是对每个字节赋值,而int有4字节(32位)
比如这样,memset(a,1,sizeof(a));
则a中的每个元素都被赋值成为2进制数为,00000001000000010000000100000001,的数
转换成10进制就是16843009
所以,一般用memset对数组赋0或-1,赋其他的值就要用循环来实现。
关于NULL,\0:
stdio.h中有这句:
#define NULL 0
NULL在编译时都转换为0了;
\0是ascll码中编号为0的那个字符,也就是(int)(\0)==0; 参考技术A 这个问题要从理解memset()的用法来说:
------------------
函数名: memset
功 能: 设置s中的所有字节为ch, s数组的大小由n给定
用 法: void *memset(void *s, char ch, unsigned n);
程序例:
#include <string.h>
#include <stdio.h>
#include <mem.h>
int main(void)
char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) - 1);
printf("Buffer after memset: %s\n", buffer);
return 0;
注意它的用法,不一定是赋为0,其实就是把一个数组的每个单元写上ch,说明了就是写上一个数 参考技术B memset初始化为0
与用循环逐个给数祖赋植为0是一样的 参考技术C 不一样的
关于memset的初始化
1. memset是以字节为单位,初始化内存块。
int data[10]
比如memset(data,0,4*10==sizeof(data));
2.memset对于char类型的数组可以将其初始化为任意一个单字符
char data[10]
比如memset(data,‘0‘ / ‘a‘ / ‘~‘ ,10==sizeof(data));
3.memset对于int类型的数组只能将其初始化为0或-1
int data[10]
比如memset(data,0,4*10==sizeof(data)); right
memset(data,-1,4*10==sizeof(data)); right
memset(data,0,4*10==sizeof(data)); wrong,data[x] would be 0x0101 instead of 1
4.当结构体类型中包含指针时,在使用memset初始化时需要小心。
5. 当结构体或类的本身或其基类中存在虚函数时,也需要谨慎使用memset。
参考博客:
http://blog.csdn.net/my_business/article/details/40537653
以上是关于关于memset()的主要内容,如果未能解决你的问题,请参考以下文章