Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1319727
  • 博文数量: 168
  • 博客积分: 2124
  • 博客等级: 大尉
  • 技术积分: 2590
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-16 23:51
文章分类

全部博文(168)

文章存档

2014年(6)

2013年(74)

2012年(71)

2011年(17)

分类: C/C++

2011-11-10 22:40:22

这俩东西其实不是太难,但是他们又有着一定的关系,在内存管理中,尤其是调用malloc函数时经常一起搭配干活~~
 
1.假如是字符串的话,他们实现的功能类似,例如
  1. sizeof("hello");//返回值是6,即包含\0
  2. strlen("hello");//返回值是5,即不包含字符串的最后一个\0
 
2.同样,我们用一个数组储存字符串的时候,得到的结果和上面是样的是一样。
 
  1. char a[] = "hello";
  2. sizeof(a);
  3. strlen(a);
3.但是,假如我们直接用指针指向一个字符串
  1. char *p = "hello" ;
  2. sizeof(p);//返回值是什么呢?是4
  3. strlen(p);//返回值还是和上面一样的
 
就是说,我们容易混的是p传递参数的问题,但是跳出来想想,sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。我们sizeof(p)的时候实际上是与sizeof(char *) 一样,注意是char * ,而不是char
 
试输出
  1. sizeof(char *);//返回值为4 ,与sizeof(p)一致
  2. sizeof(char);//返回值为1,与sizeof(*p)一致
 
正好又带着我们复习了一下,指针和它所指向的对象的区别。
 
 
 
 

4. sizeof(这点我们通常以为他是函数,其实不然,他是32个关键字之一,为什么他可以不加括号?要是函数怎么可能啊,亲!),对变量(可以理解为我们之前说的p)或对象(可以理解为“hello”)以不加括号,但若是类型,须加括号。

5.union
struct的空间计算
   
总体上遵循两个原则:
  (1)
整体空间是
占用空间最大的成员(的类型)所占字节数的整倍数;
   (2)
数据对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整倍数,如果不够则补齐,以此向后类推。

 

参考资料http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html

 
阅读(1817) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

好喜儿2011-11-11 13:48:29

GFree_Wind: 1. sizeof 是一个operator;
2. 所以字符串上,和数组的表现纯属巧合~~~——这个并不是巧合。char a[] = "hello"; a的size就是"hello"的si.....
恩,是我表达的不好,我想表达的是在处理字符串和数组时,strlen和sizeof有相似的地方~当然他们不一样~嘿嘿

GFree_Wind2011-11-11 12:21:48

1. sizeof 是一个operator;
2. 所以字符串上,和数组的表现纯属巧合~~~——这个并不是巧合。char a[] = "hello"; a的size就是"hello"的size。