Chinaunix首页 | 论坛 | 博客
  • 博客访问: 353290
  • 博文数量: 197
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 303
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-02 14:21
文章分类

全部博文(197)

文章存档

2014年(89)

2013年(108)

我的朋友

分类: C/C++

2013-11-01 13:56:06

原文地址:sizeof,strlen 的学习~~ 作者:好喜儿

这俩东西其实不是太难,但是他们又有着一定的关系,在内存管理中,尤其是调用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

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