大家好,欢迎来到IT知识分享网。
目录
一、函数介绍
memset 是一个 C/C++ 标准库函数,用于将一块内存按指定的值进行填充。它的原型如下:
void *memset(void *ptr, int value, size_t num);
ptr是指向要填充的内存块的指针。value是要填充的值。num是要填充的字节数。
二、示例代码
代码:
#include <stdio.h> #include <string.h> int main() { int arr[5]; //数组初始化 memset(arr, 0, sizeof(arr)); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } return 0; }
结果:
未进行初始化
使用memset初始化
三、memset函数详解
memset函数执行的大致流程为,从value中取出一个字节(低字节,后八位),将这个字节的值填充到目的地址。(用这个字节的值初始化目的内存块)。
因为初始时只有value的低字节有效,所以对于数组元素为单字节的情况来讲value的有效取值范围为0~255,而对于int数组来说,只能将int数组初始化为0和-1。(因为高字节和低字节一样)
示例代码:
#include <stdio.h> #include <string.h> #define N 4 int main() { int i = 0; /* * 1、验证范围为0~255 * 255和-1的初始化效果是一样的 */ char c[N]; memset(c,255,sizeof(c)); for(i=0;i<N;++i) { printf("%d ",c[i]); } puts(""); /* * 2、验证只有低字节有效,如果value为1,数组初始化结果不为1, * 而是 , * 因为初始化后内存数据位00000001 00000001 00000001 00000001 */ int in[N]; memset(in,1,sizeof(in)); for(i=0;i<N;++i) { printf("%d ",in[1]); } puts(""); return 0; }
四、总结
1、不能任意赋值。
2、初始化时注意内存的空间大小。
3、memset函数适用于大多数基本数据类型,当在C++或者Qt编程时,如果初始化的对象是结构体,注意结构体中不得含有容器等类型。因为其内存大小不固定。(动态扩展)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117718.html

