0
回答
memset&sizeof 的一些想法
【腾讯云】学生服务器套餐10元/月 >>>   

  闲暇时间写了一个土鳖的程序,里面有一些自己的体会。求指正!

#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~

}


原文链接:http://www.cnblogs.com/HappyXie/archive/2011/04/22/2025315.html
<无标签>
举报
长平狐
发帖于6年前 0回/129阅
顶部