没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
2页
头文件: #include <string> memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为: void * memset( void * ptr, int value, size_t num ); 参数说明: ptr 为要操作的内存的指针。 value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换。 num 为 ptr 的前 num 个字节,size_t 就是unsigned int。 【函数说明】memset() 会将 ptr 所指的内存区域
资源推荐
资源详情
资源评论
深入学习深入学习C语言中语言中memset()函数的用法函数的用法
头文件:
#include <string.h>
memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:
void * memset( void * ptr, int value, size_t num );
参数说明:
ptr 为要操作的内存的指针。
value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转
换。
num 为 ptr 的前 num 个字节,size_t 就是unsigned int。
【函数说明】memset() 会将 ptr 所指的内存区域的前 num 个字节的值都设置为 value,然后返回指向 ptr 的指针。
memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。例如:
char str[20];
memset(str, ' ', sizeof(str)-1);
【返回值】返回指向 ptr 的指针。
注意:参数 value 虽声明为 int,但必须是 unsigned char,所以范围在0 到255 之间。
范例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 不可以声明为 char *str = "http://c.biancheng.net";
char str[] = "http://c.biancheng.net";
memset(str, '-', 7);
puts(str);
system("pause");
return EXIT_SUCCESS;
}
执行结果:
-------c.biancheng.net
优化:尽量用memset将一个数组设置清零(带虚类除外),而不是通过for循环逐个置0
下面这个例子,大家可以参考:3D游戏编程大师技巧。本文其实重点是memset,原因是在工作中,用的比较多。
例如:要清空一个float f[10000],应该用memset(f,0,sizeof(float) * 10000);
而不是: for(int i=0; i<10000; ++i) f[i] = 0;
当然,还可以用内嵌汇编的形式:
_asm
{
mov edi, f; // edi指向数组地的目标内存的起始处
mov ecx, 1000/4; // 循环次数或移动次数
mov eax, 0; // 每一次移动32位数,都置0
rep stosd; // 移动数据
}
哈,这个准则有个前提,那就是带虚的类除外,原因是,memset将类清空,有可能将虚表也给置0了。
有可能是因为:类的创建分:栈上和堆上。
如果在栈上,那么栈对象的虚函数调用可能会在静态时确定,从而绕过虚表。所以不会出错。
但堆上就一定会出错,下面给出测试代码:
weixin_38688352
- 粉丝: 4
- 资源: 911
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页