#include <iostream>
#include <string>
#include <cstddef>
using namespace std;
class B
{
private:
const int a;//只能在构造函数初始化列表中初始化
static int b;//在类的实现文件中定义并初始化
const static int c;//与 static const int c;相同。
};
void tet(double pt[])
{
cout<<"pt 参数化:"<<sizeof(pt)<<endl;
}
static int si = 0;
int main()
{
/* 基本的数据结构:需要注意sizeof(指针)一般是编译平台位数;sizeof(数组)是有区分的*/
int ia;//定义在<cstddef>
ia = sizeof(ia);//ok
ia = sizeof ia;//ok
ia = sizeof si;//静态变量也可以取size of
ia = sizeof(int);//ok
int *pi = new int[12];
cout<< "pi:"<<sizeof(pi)<<"*pi:"<<sizeof(*(pi+12))<<endl;//pi:4 *pi:4 32位平台编译下指针大小为4位,64位平台下为8位
double pt[5];
cout<<"pt:"<<sizeof(pt)<<endl;//pt:40 需要注意的是在取sizeof的时候int a[]和int *a是不一样的;第一个表示一个指针常量,第二个是指针变量
cout<<"pt"<<sizeof(&pt)<<endl;//pt4 &pt指的是指针
tet(pt);// 数组在传参时均化为指针
int pg[] = {1,2,3};
cout<<"pg:"<<sizeof(pg)<<endl;//pt:12
float fa;
double db;
cout<<"fa"<<sizeof(fa)<<endl;// fa 32
cout<<"db"<<sizeof(db)<<endl;// fb 64 在32位和64位平台下,float都是32位,double是64位
/*结构体:结构体对齐规则,static成员变量不参与计算,空类为1,虚函数分配一个指针*/
typedef struct A
{
};
class C{
double t;
public:
virtual void f(){};
};
cout<<"empty struct:"<<sizeof(A)<<endl;//空类为1
cout<<"static struct:"<<sizeof(B)<<endl;//静态变量不参与计算
cout<<"virtual function struct:"<<sizeof(C)<<endl;
system("pause");
return 0;
}