C的实用笔记34——sizeof和strlen的区别

1.sizeof是运算符,strlen是函数

  1. strlen需要包含头文件<string.h>,而sizeof不需要

2.操作数的区别

  1. sizeof的操作数可以是变量、常量、指针、表达式、类型名、函数名、数组名、函数返回值......。最后操作系统会统一将操作数变成类型来处理,计算这个类型的数据占用多少内存。举例:
    1. 操作数是字符数组名:计算的是数粗占用的内存空间大小
      char cdata[] = {'h','e','l','l','o'};
      char str[] = "hello";
      printf("sizeof(cdata)  =%d\n", sizeof(cdata));      //5: 操作数字符数组名,计算的是字符数组占用空间大小
      printf("sizeof(\"hello\")=%d\n", sizeof("hello"));  //6: 操作数是字符串,它实际上是字符数组名
      printf("sizeof(str)    =%d\n", sizeof(str));        //6: 操作数是字符数组,计算的是字符数组占用空间大小

    2. 操作数是指针:计算的是指针占用的内存空间大小,不论什么类型指针,占用空间都是8
      char *p = "hello";
      printf("sizeof(p)     =%d\n", sizeof(p));           //8: 计算的是字符指针的占用空间大小
      printf("sizeof(cahr *)=%d\n", sizeof(char *));      //8: 计算的是字符指针的占用空间大小
      printf("sizeof(int *) =%d\n", sizeof(int *));		//8: 计算的是整型指针的占用空间大小

    3. 操作数是变量或常量:计算的是变量或常量所对应的数据类型的占用空间大小
      printf("sizeof(3)     =%d\n", sizeof(3));           //4: 计算的是数值3(默认int)的占用空间大小
      printf("sizeof(int)   =%d\n", sizeof(int));         //4: 计算的是int类型的占用空间大小
      printf("sizeof(3.2f)  =%d\n", sizeof(3.2f));        //4: 计算的是数值3.2f(float)的占用空间大小
      printf("sizeof(float) =%d\n", sizeof(float));       //4: 计算的是float类型的占用空间大小
      printf("sizeof(3.2)   =%d\n", sizeof(3.2));         //8: 计算的是数值3.2(默认是double)的占用空间大小
      printf("sizeof(double)=%d\n", sizeof(double));      //8: 计算的是double类型的占用空间大小

    4. 操作数是void类型名:void类型的占用空间大小是1
      printf("sizeof(void)  =%d\n", sizeof(void));        //1: 计算的是void类型的占用空间大小

    5. 操作数是函数名:总是1
      int test(int a){}
      printf("sizeof(test)  =%d\n", sizeof(test));        //1

    6. 操作数是函数名(实参列表):计算的是函数返回值类型所占用的空间大小
      int test(int a){}
      printf("sizeof(test)  =%d\n", sizeof(test(5)));     //4: 计算的是函数返回值类型的占用空间大小

  2. strlen的操作数只能是字符指针类型的地址,可以理解为就是字符串。举例:
    printf("strlen(\"hello\")=%d\n", strlen("hello"));  //5: 计算的是字符串的有效字符长度
    char str[] = "hello";
    printf("strlen(str)    =%d\n", strlen(str));        //5: 计算的是字符串的有效字符长度 
    char *p = "hello";
    printf("strlen(p)     =%d\n", strlen(p));           //5: 计算的是字符串的有效有效长度

3.功能的区别

  1. sizeof是计算操作数占用的内存空间大小
  2. strlen是计算字符串中有效字符长度(也就是字符串中第一个空字符'\0'之前的长度)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值