转自: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;
}