Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2697081
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: IT职场

2014-12-16 09:40:58


http://blog.csdn.net/xuqianghit/article/details/6767523

细说c语言sizeof运算符

1. sizeof是什么?宏定义?函数?

sizeof即不是宏定义,也不是函数,那么好吧,他是什么?答曰”运算符“。

2. 应用场景

在设计计算对象大小的代码中,推荐使用sizeof去去得对象(基础类型,struct,union等)的大小。

3. 易错点


  1. char* ss = "0123456789";  
  2. sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针  
  3. sizeof(*ss) 结果 1 ===》*ss是第一个字符  
  4.   
  5. char ss[] = "0123456789";  
  6. sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1  
  7. sizeof(*ss) 结果 1 ===》*ss是第一个字符  
  8.   
  9. char ss[100] = "0123456789";  
  10. sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1  
  11. strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前  
  12.   
  13. int ss[100] = "0123456789";  
  14. sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4  
  15. strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的  
  16.   
  17. char q[]="abc";  
  18. char p[]="a\n";  
  19. sizeof(q),sizeof(p),strlen(q),strlen(p);  
  20. 结果是 4 3 3 2        

  1. class X  
  2. {  
  3. int i;  
  4. int j;  
  5. char k;  
  6. };  
  7. X x;  
  8. cout<<sizeof(X)<
  9. cout<<sizeof(x)<

  1. char szPath[MAX_PATH]  
  2.    如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(void fun(char szPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)   


4. 如果自己实现该怎么写?

如果面试官突然想要你自己写一个sizeof函数的话,如何实现?这里是一个简单版本。


  1. #include   
  2.   
  3. #define my_sizeof(L_Value) (                    \  
  4.     (char *)(&L_Value + 1) - (char *)&L_Value   \  
  5. )  
  6.   
  7. #include   
  8. #include   
  9. int main(void){  
  10.     int i;  
  11.     double f;  
  12.     double a[4];  
  13.     double *p;  
  14.   
  15.     printf("%d\n", my_sizeof(i));  
  16.     printf("%d\n", my_sizeof(f));  
  17.     printf("%d\n", my_sizeof(a));  
  18.     printf("%d\n", my_sizeof(p));  
  19.     printf("%d\n", my_sizeof("abdegh"));  
  20.   
  21.     return 0;  
  22. }  
阅读(1221) | 评论(0) | 转发(0) |
0

上一篇:不好的递归算法

下一篇:详解sizeof

给主人留下些什么吧!~~