初始化:普通数组 vs 指针数组 => sizeof, memset
来源:互联网 发布:网络反监控软件 编辑:程序博客网 时间:2024/06/05 11:08
typedef TYPE; TYPE * pArray = new TYPE[100]; memset(pArray, 0, 100*sizeof(TYPE)); //memset(pArray, 0, sizeof(pArray)); //error, output: sizeof(pArray) = 4; TYPE tArray[100]; memset(tArray, 0, sizeof(tArray)); //memset(&tArray, 0, sizeof(tArray)) is also Ok!
Attention ! :::::
memset是按字节来设置的,也就是,00000000,比如下面的问题:
【摘自:http://www.cnblogs.com/fengyuehan/archive/2012/02/03/memset.html】
memset相信总是用c的童鞋不会陌生
百度百科给的定义是:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
原先我总是以为memset是初始化数组的最好方式,比for帅得多,直到最近做了一道题才发现不是这样的。。
比如:
#include <stdio.h>#include <stdlib.h>int main(int argc, char** argv) { int a[5]; int i; memset(a,2,sizeof(a)); for(i=0;i<5;i++) { printf("%d \n",a[i]); } return (EXIT_SUCCESS);}
运行结果;
memset是把每个字节的全部内容替换成2,于是int的4个字节(不同编译器可能不一样)就替换成了
00000010 00000010 00000010 00000010 了,把它换成十进制后就成了2^1+2^9+2^17+2^25
我算数差,只能靠程序了,代码如下:
#include <stdio.h>#include <stdlib.h>#include <math.h>int main(int argc, char** argv) { printf("%lf",pow(2,1)+pow(2,9)+pow(2,17)+pow(2,25)); return (EXIT_SUCCESS);}
运行结果:
而0和-1还是可以用memset的,因为0补完了就是 00000000 00000000 00000000 00000000 还是0
-1是 11111111 11111111 11111111 11111111 还是-1
代码:
#include <stdio.h>#include <stdlib.h>int main(int argc, char** argv) { int a[5],b[5]; int i; memset(a,-1,sizeof(a)); memset(b,0,sizeof(b)); for(i=0;i<5;i++) { printf("%d %d\n",a[i],b[i]); } return (EXIT_SUCCESS);}
运行结果:
结论:memset在初始化int类型数据时,只能初始化-1和0时才能得到原值,根据定义,它应该是主要初始化字符数组的工具。
看见了吧,这就是memset的作为了。。。。。
附注:
bool flag[10];
memset(flag, false, sizeof(flag));
- 初始化:普通数组 vs 指针数组 => sizeof, memset
- memset快速初始化数组
- memset初始化维数组
- memset函数 数组初始化
- memset函数初始化数组
- 关于memset初始化动态数组:
- memset对数组的初始化
- 关于memset初始化填充数组。
- 指针数组、数组指针、memset填充问题
- sizeof 数组与指针
- sizeof 数组 指针
- 指针数组与sizeof
- sizeof && strlen, 数组 && 指针
- sizeof 数组与指针
- sizeof 指针和数组
- 数组,指针sizeof
- Sizeof 数组指针
- sizeof 数组与指针
- 不必羡慕别人的生活
- php isset()函数的作用
- 英文谚语
- hibernate注解--映射主键属性
- xml 添加xsi:schemaLocation 属性
- 初始化:普通数组 vs 指针数组 => sizeof, memset
- MVC3 导出Excel
- 高仿网易新闻顶部滑动条效果
- 人人网张铁安:Feed系统架构分析
- 临时图片链接
- 以限制模式打开数据库所应该注意的问题
- virtual继承
- 批处理
- 傅立叶变换中的吉布斯现象