C语言之坑:sizeof与strlen

两者区别:

1.sizeof 是一个操作符, strlen 是库函数。
2.sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以
结尾为‘\0‘的字符串作参数。
3.编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运
行时才计算的是数据类型占内存的大小,而 strlen 计算的是字符串实
际的长度;

**个人总结:sizeof针对计算机存储,考虑对象在计算机实际所占有的字节数;
strlen针对人眼,看见几个字符就占几个字符。**


实战讲解:

sizeof(int double bool short char long)?
sizeof(char*  int*  double*)?

答案:第一组:4 8 1 2 1 4 求的是基本类型所占的字节数
第二组:4 4 4 三种类型的指针 反正都是指针 指针所占空间大小总为4字节 与类型无关。

char s1[]="123456";
char *s2="123456";
char s3[10]={'1','2','3'};
char s4[]={'1','\0','2','\0'};

答案:
strlen:分别为:6 6 3 1
sizeof: 分别为:7 4 10 4

解释:strlen为人眼看到的,直接数,遇到‘\0’截止,这个不解释了吧 字符串结束标志,不懂得也别问我,好好去学习 。 sizeof是计算机模式,因为’\0’也会占内存,既然占了内存肯定要计算出来,不然其他对象覆盖了怎么办。s2为什么是4?因为它是一个指针呀。。。s3被初始化了,字节数=类型字节数乘以元素个数(1*10)。

数组与指针:

1. int *pi = new int[10];          //这是指针     
2. sizeof(pi);                     // = 4    
4. int ai[10];  
5. int *p = ai;                    //这还是指针     
6. sizeof(p);                      // = 4      
7. double* (*a)[3][6];             //看成(double *) (*a)[3][6],即一个3×6的二维数组,数组元素 为指针,指向   
                                   //double类型。  
8. sizeof(a);                      // = 4,a为指向上述二维数组的指针      
9. sizeof(*a);                     // = sizeof(double *)*3*6 = 72,*a表示上述二维数组       
10. sizeof(**a);                   // = sizeof(double *)*6 = 24,**a即*(*a),表示double*[6],是元素 为                       
                                   //double指针的一维数组。  
11. sizeof(***a);          // = sizeof(double *) = 4,表示上述一维数组中的第一个元素,元素 类型为double指针。    
12. sizeof(****a);         // = sizeof(double) = 8,表示上述数组首元素指向的double类型。

函数传递:

    1. void acf(char p[3])     //参数类型是int[],表示指向int的指针     
    2. {     
    3.     sizeof( p );        // = 4     
    4. }     
    5. void aif(int p[])       //参数类型是int[],表示指向int的指针     
    6. {     
    7.     sizeof( p );        // = 4     
    8. }     
    9. void pif(int (*p)[6])   //参数类型是int (*)[6],表示指向int数组的指针    
    10. {     
    11.     sizeof( p);         // = 4     
    12.     sizeof( *p );       // = sizeof(int)*6 = 24     
    13. }     
    14. void ppf(int *p[6])     //参数类型是int *[],表示指向int指针的指针     
    15. {     
    16.     sizeof( p );        // = 4     
    17.     sizeof( *p );       // = 4     
    18. }   
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值