Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203288
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 798
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-14 14:54
文章分类

全部博文(87)

文章存档

2015年(87)

我的朋友

分类: C/C++

2015-03-14 16:07:42

原文地址:C语言的memset函数代码 作者:淘默儿

#include
void* memset(void* s, int c, size_t n)
{
    unsigned 
char* p = (unsigned char*) s;

    
while (n > 0{
    
*p++ = (unsigned char) c;
    
--n;
    }


    
return s;
}
memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:
    void *memset(void*,int,unsigned);
  其中void*表示地址,详细介绍见8.6节。
  例如,下面的代码用数组做参数传递给标准函数memset(),以让其将数组设置成全0:
    #include
    void main()
    {
     int ia1[50];
     int ia2[500];
     memset(iai,0,50*sizeof(int));
     memset(ia2,0,500*sizeof(int));
     //...
    }

  memset()的第一个实参是数组名,数组名作参数即数组作参数,它仅仅只是一个数组的起始地址而已。
  实现第一个memset()函数调用的内存布局见图7-3。 在函数memset()栈区,从返回地址往上依次为第1,2,3个参数。第1个参数中的内容是main()函数中定义的数组ia1的起始地址。第2个参数是给数组设置的值(0),第3个参数是数组的长度(50*2)。函数返回时,main()函数的数组中内容全置为0。



图7_3 memset函数调用的内存布局

阅读(930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~