• strlen 和 sizeof 的区别


    strlen:(1)函数

       (2)只能用char*作为参数,且必须是以‘’结尾的,不计算

       (3)由于是函数,当数组作为参数时,退化为指针

       (4)运行时才计算
    sizeof:(1)运算符,结果类型为size_t

       (2)可以用类型做参数,比如 short f();  sizeof(f())相当于sizeof(short) = 2,如果用在字符数组上,计算

        char aa[] = "abc";
        cout << sizeof(aa) << ' ' << strlen(aa) << endl;

        输出为 4和3

       (3)数组作为参数时,不退化

       (4)大多数程序在编译的时候就计算sizeof

       (5)sizeof只能计算静态数组的大小,不能计算动态分配的数组的大小

    实例(经典考题):
    double* (*a)[3][6];
    cout<<sizeof(a)<<endl; // 4       a为指针
    cout<<sizeof(*a)<<endl; // 72    *a为一个有3*6个指针元素的数组
    cout<<sizeof(**a)<<endl; // 24    **a为数组一维的6个指针
    cout<<sizeof(***a)<<endl; // 4     ***a为一维的第一个指针
    cout<<sizeof(****a)<<endl; // 8     ****a为一个double变量
    解析:首先要理解 double* (*a)[3][6],意思是定义一个二维数组,这个数组的每个元素都是指针,这个数组的数组名是*a, a是指向这个数组首地址的指针。所以a是一个指向一个三行六列double指针的数组的指针的指针,*a是3行6列数组的首地址,**a就是直线一维具有6个double*元素数组的首地址,***a是double*的指针,****a是double类型
     
  • 相关阅读:
    求矩形最大面积
    异或相关知识
    算法模板-线段树区间最值
    矩阵递推关系的建立 and 矩阵快速幂
    二分答案模板
    关于STL,set,vector,map的时间
    域名解析
    CDN配置
    CDN的工作原理及好处
    打赏
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8527236.html
Copyright © 2020-2023  润新知