• sizeof、strlen


    一、sizeof

            sizeof(...)是运算符,sizeof操作符的结果类型是size_t。它在头文件里typedef为unsigned int类型。是以字节为单位进行计数的。所以位域成员不

    能用sizeof进行计算參数能够是数组、指针、类型、对象、函数等。

           功能是:获得保证能容纳实现所建立的最大对象的字节大小。

           因为在编译时计算。因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的

    空间,返回值跟对象、结构、数组所存储的内容没有关系。


            详细而言,当參数分别例如以下时,sizeof返回的值表示的含义例如以下:

    数组——编译时分配的数组空间大小。

    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 字节byte);

    类型——该类型所占的空间大小。

    对象——对象的实际占用空间大小。

    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。


    比如:

    char a[] = "hello world";
    char *p = a;
    cout<< sizeof(a) << endl; // 12 字节
    cout<< sizeof(p) << endl; // 4 字节


    注意当数组作为函数的參数进行传递时。该数组自己主动退化为同类型的指针。

    void Func(char a[100])
    {
    cout<< sizeof(a) << endl; // 4 字节而不是 100 字节
    }




    二、strlen

    头文件:string.h

    函数: int strlen(char *s);

    格式:strlen (字符数组名、指针。且必须是以''结尾的

    功能:计算字符串s的(unsigned int型)长度,不包含''在内。


    比如:

    int ac[10];

    cout<<sizeof(ac)<<endl;(结果是40  byte)

    cout<<strlen(ac)<<endl; (ac相当于一个指针,可是strlen仅仅能接受char*类型,所以编译时出错)


    char aa[10]={''}; 

    cout<<strlen(aa)<<endl; //结果为0


    class X{ int i; int j; char k;};X x;

    cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐

    cout<<sizeof(x)<<endl; 结果 12 同上


    char szPath[MAX_PATH]

    假设在函数内这样定义。那么sizeof(szPath)将会是MAX_PATH,可是将szPath作为函数參数时。sizeof(szPath)却会是4(指针大小)


    char ca1[] = {‘C’。'++' };

    char ca2[] = {‘C’,'++' ,‘’};

              故strlen(ca1)的值没有定义。而strlen(ca2)=2。



  • 相关阅读:
    二分查找练习
    Linux中Buffer和Cache的区别
    c++设计模式之单例模式
    c++设计模式之工厂模式
    C++中内存泄漏的几种情况
    snprintf
    命名空间和模块化编程1
    避免内存泄漏
    静态对象强制类型转换
    副本构造器
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6897226.html
Copyright © 2020-2023  润新知