memset&sizeof 的一些想法
2011-04-22 22:05
375 查看
闲暇时间写了一个土鳖的程序,里面有一些自己的体会。求指正!
#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~
}
#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~
}
相关文章推荐
- 关于linux下sizeof(fun/*fun/&fun)的一些讨论
- memset(&a, 0, sizeof(struct customer))函数
- sprintf、atoi、strlen、strcat、memset、sizeof的一些用法总结
- 初始化:普通数组 vs 指针数组 => sizeof, memset
- memset&&sizeof
- blog写作预告!近期会写我"个人详历" 以及对企业运营的一些想法
- memset(&si, 0, sizeof(STARTUPINFO)); CreateProcess
- VS2015--win32工程配置的一些想法之GdiplusTypes.h(470) : error C3861: 'min': identifier not found
- memset(&struct, 0, sizeof(struct))后给结构体中string赋值出错
- 关于sizeof和memset/memcpy的一些事
- 《PHP & More》第二期发布& 一些想法
- 关于sizeof()的一些思考(转载)
- 软件项目后期收官时的一些问题和想法
- && 和 || 的一些用法
- 关于对象映射(Dto->model) 思路的一些想法
- 细谈Slick(5)- 学习体会和将来实际应用的一些想法
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&amp;&amp;bzoj 2820 YY的GCD&amp;&amp;BZOJ 3529 数表)
- C语言深度解剖(精讲版)——读书笔记15 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记20 &&自己的一些理解
- 2017.7.11 && 一些不熟悉的函数 && 一些干货学习资料