数组初始化的时候常用for()循环,不过如果考虑效率的话,最好用memset(),下面简单介绍以下memset()。
函数原型:
void *memset(void *s, int ch, size_t n)
函数解释:将s中前n个字节替换为ch并返回s;
memset:它包含在<memory.h>或者<string.h>中。作用是在一段内存块中填充某个给定的值,它的操作对象为单个字节,是对较大的结构体或数组进行清零操作的一种最快方法。
提到memset()就不得不提到sizeof(),因为sizeof()使用不好可能给memset()带来很隐蔽的错误:
int some_func(struct something *a){
  …
  …
  memset(a, 0, sizeof(a));
  …
  }
上面这段代码是不能达到对a[]清零的目的的,因为some_func()函数的参数已退化为指针,而不是数组对象,因此这里的sizeof(a)在32位机器上返回的应该是4,而不是a[]数组的长度(所占字节数)。
sizeof是C/C++中的一个操作符(operator),而不是函数,其作用就是返回一个具有明确类型的对象或者类型所占的内存字节数。
它有以下特点:
1.它在程序编译时被执行
2.它的操作对象可以是某个对象,或者某种类型
3.当适用于一个变量时, sizeof 返回实际的大小,当适用于静态的空间数组, sizeof 返回全部数组的尺寸。
看完百科上关于sizeof()的介绍,心中顿时产生了一堆问号,真是学的越深入,不懂得越多啊╮(╯﹏╰)╭
以上内容均来自百度百科,感谢默默编辑词条的大神们。
详情参阅:
http://baike.baidu.com/view/982208.htm
http://baike.baidu.com/view/1078660.htm
posted on 2012-08-07 23:38 小鼠标 阅读(3174) 评论(2)  编辑 收藏 引用 所属分类: C语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

随笔分类(111)

随笔档案(127)

friends

最新评论

  • 1. re: 线段树
  • 是这个样子的,所以在OJ有时候“卡住”了也不要太灰心,没准真的不是自己的原因呢。
    加油,祝你好运啦!
  • --小鼠标
  • 2. re: 线段树
  • 对于编程竞赛来说,Java所需时间一般为C/C++的两倍。合理的竞赛给Java的时间限制是给C/C++的两倍。
  • --伤心的笔
  • 3. re: poj1273--网络流
  • 过来看看你。
  • --achiberx
  • 4. re: (转)ubuntu11.10无法启动无线网络的解决方法
  • 膜拜大神。。查了一个下午资料终于在这里解决了问题。。神牛说的区域赛难道是ACM区域赛。。?
  • --Hang
  • 5. re: 快速排序、线性时间选择
  • 博主,谢谢你的文章。你的方法可以很好的处理分区基准在数组中重复的情况,书上的方法遇到这种输入会堆栈溢出。书上给出了解释但给的方法貌似不简洁。
  • --lsxqw2004

阅读排行榜