memset&sizeof 的一些想法
闲暇时间写了一个土鳖的程序,里面有一些自己的体会。求指正!
#include "iostream.h"
#include "string.h"
typedef struct // 这里可以没有名字
{
int i;
int j;
double d;// double 8 字节 按照4位对齐的方法,这里设计数据结构的时候 还是老实一点将其设为 字节对齐的吧 刚好16
}Node;// 这里必须有名字哦
void main()
{
int data[200];
int i;
for (i=0;i<200;i++)
{
cout<<*(data+i)<<endl;
}
memset(data,0,sizeof(data));// 使用menset初始化数组成员,代码简洁呀。
for (i=0;i<200;i++)
{
cout<<*(data+i)<<endl;
}
cout<<"the size of data:"<<sizeof(data)<<endl;// sizeof 的威力无穷呀,真想看看它的源码,可惜看不到
cout<<sizeof(double);
// 再试试 对结构体 sizeof能给力不 嘿嘿
Node node[100];
for (i=0;i<100;i++)
{
cout<<node->d<<" "<<node->i<<" "<<node->j<<endl;
}
memset(node,0,sizeof(node));// 太给力了 求sizeof源码
for (i=0;i<100;i++)
{
cout<<node->d<<" "<<node->i<<" "<<node->j<<endl;
}
// 再试试 对结构体指针 sizeof能给力不
Node *ptr_node=node;
cout<<"the sizeof(node) is"<<sizeof(node)<<"the size of ptr_node is"<<sizeof(ptr_node)<<endl;
// 哈哈 不给力了吧 但是这里引导出了一个问题,这也是以前没有重视sizeof的应用的原因
// sizeof 在处理指针(两种不同类型的,一个是独立声明的数组,它能处理,但是对于赋值而来的指针,sizeof是不起作用的
// 这也是没有重视sizeof的原因)
// 再试试sizeof对 new生成的指针 看看效果
Node* ptr_node2=new Node[100];
cout<<"the size is:"<<sizeof(ptr_node2)<<endl;// 求给力呀
// 唉 没有给力成功了 不过出现了两个问题,一个是指针的占据内存的空间一直是4字节,这个,指针的优势呀
// 还有一个就是 数组名和new以及赋值的指针 到底有木有区别 走 到内存中 去see see
cout<<"the address of node array is:"<<node<<endl;
cout<<"the address of node_node2 is:"<<ptr_node2<<endl;
// 使用的是vc在调试状态下的memroy查看了一下,啥都没有,不过我想到了一个可以解释的原因
// 指针在复制的时候,以及在new动态申请的时候操作系统不会保留相关信息,而静态的生命数组操作系统会保持 相关的信息
// 而sizeof则正是利用了这个信息。O(∩_∩)O~
}