关于sizeof(bmInfo)的一个有关问题

关于sizeof(bmInfo)的一个问题
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); 
CDC dcComp;
dcComp.CreateCompatibleDC(pDC);
dcComp.SelectObject(&bitmap);
BITMAP bmInfo; 
bitmap.GetObject(sizeof(bmInfo),&bmInfo);
pDC->BitBlt(50,10,bmInfo.bmWidth,bmInfo.bmHeight, &dcComp, 0,0,SRCCOPY);
}
上述代码中加载一个位图,为什么bmInfo刚定义,没有任何初始化,sizeof(bmInfo)为什么还能求出他的大小,另外,bmInfo.bmWidth和bmInfo.bmHeigth为什么也没被赋值,就能用了?请高手详尽的解答一下。
sizeof Bitmap BITMAP

------解决方案--------------------
我也没学多长时间,所以有错请指出。
sizeof()可以计算出一个类他所使用的内存空间。内置类的使用空间一般已经定了下来,定义类一般是内置类的结合,sizeof()可以通过定义类里使用的内置类的内存空间的和来求出定义类的大小。(如一个类POINT使用两个int来储存坐标,sizeof(POINT)就会返回8(int的大小是4,两个int大小就是8))

bmInfo.bmWidth和bmInfo.bmHeigth在变量宣言的时候,系统会给他分配内存。因为已经分配了内存,所以其实已经可以使用。都说在 = 0之后再使用是怕变量在赋值前就被使用。在赋值前,变量的内容会是刚分配的内存的内容,这个内容是不确定的,可能会导致程序的结果和你预想的不一样。
在这个函数里,他只会给赋值,所以即使没有=0初始化,使用也是安全的。
------解决方案--------------------
bitmap.GetObject(sizeof(bmInfo),&bmInfo);

这句话的意思,是把位图里面一个大小为 sizeof(bmInfo) 字节的数据装载到 bmInfo 结构体所在的内存中