Sizeof的用法

 转自:https://www.cnblogs.com/huolong-blog/p/7587711.html

#include <iostream>

using namespace std;

/*
 * sizeof用法
 * 定义:sizeof是一个操作符(operator),其作用是返回一个对象或类型所占的内存字节数。
 *
*/
class My_Empty{

};

class My_Empty_1{
public:
    My_Empty_1(){
        int a = 10;
    }
};

struct Node{

};

void Func1(){

}

int Func2(int tmp){
    cout<<"In Func2"<<endl;
}
void Func3(){
    cout<<"In Func3"<<endl;
}

void Function_Array_Char(char a[]){
    cout<<"size of char a[] = "<<sizeof(a)<<endl;
}

void Function_Array_Int(int b[]){
    cout<<"size of int b[] = "<<sizeof(b)<<endl;
}

int main(int argc, char *argv[])
{
    cout << "sizeof() of using" << endl<<endl;
    /*
     * 基本类型(int,char,bool,float,long,double等)的sizeof
     * 大小就等于类型的相应大小
    */
    cout<<"Basic Type - char,bool,int,long,double"<<endl<<endl;
    cout<<"sizeof(bool) = "<<sizeof(bool)<<endl;              //    1
    cout<<"sizeof(char) = "<<sizeof(char)<<endl;              //    1
    cout<<"sizeof(int) = "<<sizeof(int)<<endl;                //    4
    cout<<"sizeof(long) = "<<sizeof(long)<<endl;              //    4
    cout<<"sizeof(double) = "<<sizeof(double)<<endl;          //    8
    /*
     * 数组类型的sizeof
     * 数组的sizeof等于数组所占用的内存字节数
     * 注意:
     *    (1)当字符数组表示字符串时,其sizeof值将'\0'计算进去;
     *    (2)当数组为形参时,其sizeof值相当于指针的sizeof值;
     * 计算的是数组的实际大小,需要注意字符串计算的时候是否加上最后的'\0'
    */
    cout<<endl<<"Array Type"<<endl<<endl;
    char a[] = "1234567";
    cout<<"sizeof(a)  = "<<sizeof(a)<<endl;        //    8
    char a1[] = {'1','2','3','4','5','6','7'};
    cout<<"sizeof(a1) = "<<sizeof(a1)<<endl;       //    7
    char a2[10] = {'1','2','3','4'};
    cout<<"sizeof(a2) = "<<sizeof(a2)<<endl;       //    10

    char b[10] = "1234567";
    cout<<"sizeof(b) = "<<sizeof(b)<<endl;         //    10

    char c[] = "123\n";
    cout<<"sizeof(c) = "<<sizeof(c)<<endl;         //    5
    char d[] = "123\0";
    cout<<"sizeof(d) = "<<sizeof(d)<<endl;         //    5

    char e[] = "12\n3\0";
    cout<<"sizeof(e) = "<<sizeof(e)<<endl;         //    6
    int f[] = {1,2,3,4};
    cout<<"sizeof(f) = "<<sizeof(f)<<endl;         //    16
    int g[10] = {1,2,3,4};
    cout<<"sizeof(g) = "<<sizeof(g)<<endl;         //    40

    /* 数组为形参
     *
     */
     char str_a[100];
     Function_Array_Char(str_a);                   // 4 相当于测试的指针大小
     int int_b[100];
     Function_Array_Int(int_b);                    // 4  同上

    /*
     * 指针的sizeof
     * 指针是用来记录另一个对象的地址,所以指针的内存大小当然就等于计算机内部地址总线的宽度。
    */
    cout<<endl<<"Pointer Type"<<endl<<endl;
    char* pa = NULL;
    cout<<"sizeof(pa) = "<<sizeof(pa)<<endl;          //    4
    int* pa1 = NULL;
    cout<<"sizeof(pa1) = "<<sizeof(pa1)<<endl;        //    4
    long long* pa2 = NULL;
    cout<<"sizeof(pa2) = "<<sizeof(pa2)<<endl;        //    4
    int tmp = 10;
    int* pa3 = &tmp;
    cout<<"sizeof(pa3) = "<<sizeof(pa3)<<endl;        //    4
    char* pb = "1234567";
    cout<<"sizeof(pb) = "<<sizeof(pb)<<endl;          //    4
    //这里相当于计算的是char类型大小
    cout<<"sizeof(*pb) = "<<sizeof(*pb)<<endl;        //指向具体值 1
    int* pb1 = &tmp;
    cout<<"sizeof(*pb1) = "<<sizeof(*pb1)<<endl;      //指向具体值 4
    char** pc;
    cout<<"sizeof(pc) = "<<sizeof(pc)<<endl;          //    4
    int** pc1;
    cout<<"sizeof(pc1) = "<<sizeof(*pc1)<<endl;       //  4
    //pd是一个指针数组名,所以sizeof(pd)计算的是指针数组大小
    char* pd[10];
    cout<<"sizeof(pd) = "<<sizeof(pd)<<endl;          //  40
    char(*pd1)[10];
    cout<<"sizeof(pd1) = "<<sizeof(pd1)<<endl;        // 4
    cout<<"sizeof(*pd1) = "<<sizeof(*pd1)<<endl;      // 10
    //函数指针
    void (*Func)();
    //void Func1();
    cout<<"sizeof(Func) = "<<sizeof(Func)<<endl;       // 4
    //cout<<"sizeof(Func1) = "<<sizeof(Func1)<<endl;   // error 不能对函数名求值
    cout<<"sizeof(*Func) = "<<sizeof(*Func)<<endl;     // 1

    /*
     * 函数的sizeof
     * sizeof也可对一个函数调用求值,其结果是函数返回值类型的大小,函数并不会被调用;
     * 对函数求值的形式:sizeof(函数名(实参表));
     * 不可以对函数名求值;
     * 对有参数的函数,在用sizeof时,须写上实参表;
    */
    cout<<endl<<"Function Type"<<endl<<endl;
    cout<<"sizeof(Func2(10)) = "<<sizeof(Func2(10))<<endl;    // 4 相当于sizeof(int)
    //cout<<"sizeof(Func2) = "<<sizeof(Func2)<<endl;          // error 不能对函数名求职
    cout<<"sizeof(Func3()) = "<<sizeof(Func3())<<endl;        // 1 相当于sizeof(int)

    /*
     * 结构体和类的sizeof
    */
    cout<<endl<<"struct/class Type"<<endl<<endl;
    cout<<"sizeof(My_Empty) = "<<sizeof(My_Empty)<<endl;      // 1
    cout<<"sizeof(My_Empty_1) = "<<sizeof(My_Empty_1)<<endl;  // 1
    cout<<"sizeof(Node) = "<<sizeof(Node)<<endl;              // 1

    /*
     * 表达式的sizeof
     * 值为表达式的最终结果的数据类型的大小
    */
    cout<<endl<<"Expression Type"<<endl<<endl;
    cout<<"sizeof(5.5) = "<<sizeof(5.5)<<endl;                // 8
    cout<<"sizeof(2+3.3+10) = "<<sizeof(2+3.3+10)<<endl;      // 8
    cout<<"sizeof(5) = "<<sizeof(5)<<endl;                    // 4
    return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值