sizeof 有关用法

来源:互联网 发布:c语言中如何判断闰年 编辑:程序博客网 时间:2024/06/03 18:52

 

测试系统是64位


void test15()
{
        struct
        {
                short a1;
                short a2;
                short a3;
        }A;
        struct
        {
                long a1;
                short s2;
        }B;

        char *s1="012";
        char s2[] = "012";
        char s3[100] = "012";
        int s4[100];
        char q1[] ="abc";
        char q2[] = "a\n";
        char *q3 = "a\n";
        char *s5 = (char*)malloc(10);
        void *s6 = (void*)malloc(10);

        cout<<sizeof(s1)<<endl;
        cout<<sizeof(s2)<<endl;
        cout<<sizeof(s3)<<endl;
        cout<<sizeof(s4)<<endl;
        cout<<sizeof(s5)<<endl;
        cout<<sizeof(s6)<<endl;
        cout<<sizeof(q1)<<endl;
        cout<<sizeof(q2)<<endl;
        cout<<sizeof(q3)<<endl;
        cout<<sizeof(A)<<endl;
        cout<<sizeof(B)<<endl;
}

8
4
100
400
8
8
4
3
8
6
16

 


void test16()
{
        class B
        {
                private:
                        char c1;
                        int a1;
                        char c2;
        };
        class C
        {
                private:
                        int a1;
                        char c1;
                        char c2;
        };


        cout<<sizeof(B)<<endl;          //12
        cout<<sizeof(C)<<endl;       //8
}

 


        class D
        {
                public:
                        int a;
                        static char c;
                        D();
                        ~D();
        };

void test17()
{
        cout<<sizeof(D)<<endl;  // 4
}

 

void test18()
{
        class a{};
        class a2{};
        class b:public a
        {};
        class c:public virtual b
        {};
        class d: public a,public a2
        {};

        cout<<sizeof(a)<<endl;
        cout<<sizeof(b)<<endl;
        cout<<sizeof(c)<<endl; //虚继承涉及虚表(虚指针)
        cout<<sizeof(d)<<endl;
}

1
1
8
1

 

void test19()
{
        class base
        {

                public:
                base(){};
                ~base(){}
                virtual void f(){cout<<"base\n";}
                void g2(){}
        };

        class der :public base
        {
                public:
                der(){}
                ~der(){}
                virtual void f(){cout<<"der\n";}

        };

        base b;
        der d;
        base *p = new der;
        cout<<sizeof(base)<<endl;
        cout<<sizeof(der)<<endl;

}

8

8

 

 测试机器32位


int getsize(int data[])
{
    return sizeof(data);
}

void test()
{    
    int data1[] = {1,2,3,4,5};
    int size1 = sizeof(data1);
    
    int *data2 = data1;
    int size2 = sizeof(data2);
    
    int size3 = getsize(data1);

    printf("%d %d %d\n",size1,size3,size3);

}

结果为
 20 4 4

当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。


 

0 0
原创粉丝点击