码迷,mamicode.com
首页 > 其他好文 > 详细

编程小常识

时间:2015-05-02 20:40:29      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

1 以前以为memset是给一个数组赋初值,实际上呢?

void *memset(void *s, int ch, unsigned n);

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。

所以如果这样

int array[5] = {1,4,3,5,2};
  for(int i = 0; i < 5; i++)
  cout<<array[i]<<" ";
  cout<<endl;
  memset(array,0,5*sizeof(int));
  for(int k = 0; k < 5; k++)
  cout<<array[k]<<" ";
  cout<<endl;

输出结果是

1 4 3 5 2

0 0 0 0 0

但是如果这样

int array[5] = {1,4,3,5,2};
  for(int i = 0; i < 5; i++)
  cout<<array[i]<<" ";
  cout<<endl;
  memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同
  for(int k = 0; k < 5; k++)
  cout<<array[k]<<" ";
  cout<<endl;

输出结果就是

1 4 3 5 2

16843009 16843009 16843009 16843009 16843009
因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
 
  所以用memset对非字符型数组赋初值是不可取的!
 
那么什么用于赋非零的初值呢?
fill 的头文件是<iostream> 命名空间是std;
用法:
eg:
#include<iostream>
using namespace std;
int main()
{
         char s[100];
         fill(s,s+100,a);
         for(int i=0;i<100;i++)
          cout<<s[i];
       cout<<endl;
       system("pause");
}

 

编程小常识

标签:

原文地址:http://www.cnblogs.com/yxzfscg/p/4472449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!