• sizeof 和 strlen 的区别


    sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度。那么他么到底有什么区别

    1、sizeof    不是函数,而是一个操作符。字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!  

       strlen      是一个函数,在程序运行期间计算出结果。

    2、strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。

      数组做sizeof的参数不退化,传递给strlen就退化为指针了。

    char str[20]="0123456789";//str是编译期大小已经固定的数组
    int a=strlen(str); //a=10;//strlen()在运行起确定
    int b=sizeof(str); //而b=20;sizeof()在编译期确定
    char *ptr="hello";
    int c=sizeof(ptr); // c=4 , 计算的是所占内存的大小
    int d=sizeof(*ptr); // d=1 , 计算所指向字节的内存大小
    int e=strlen(ptr); // e=5 , 计算字符串的长度

    3、sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''''结尾的。

        char c[] = { 'a', 'b', 'c' };
       //strlen 必须以''结束,如果没有'',则计算结果不可预料
       cout << sizeof(c) << " " << strlen(c) << endl; // output : 3 15

    数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,

    如: 

    fun(char [8])
    fun(char [])
    都等价于 fun(char *) 
    在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
    如果想在函数内知道数组的大小, 需要这样做:
    进入函数后用memcpy拷贝出来,长度由另一个形参传进去 

    fun(unsiged char *p1, int len)
    {
      unsigned char* buf = new unsigned char[len+1]
      memcpy(buf, p1, len);
    } 
  • 相关阅读:
    Redis(二)
    Redis(一)
    MyBatis--一级二级缓存
    MySQL优化
    HashMap
    ArrayList
    常用框架注解说明
    Linux常用基础命令
    SpringCloud--gateway路由配置
    JetBrains系列软件的插件安装
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/5312451.html
Copyright © 2020-2023  润新知