一、Sizeof 用法
- Sizeof 是一个关键字不是库函数
所以:sizeof在计算变量所占空间大小时,括号可以省略,而计算类型大小时,不能省略。
二、经典问题
在下面代码中,假设在32位系统下,各sizeof计算的结果分别是多少?
int *p = NULL;
int a[100];
int b[100];
void fun(int b[100])
{
sizeof(b);
}
char (*pArray1)[4]={0};
char (*pArray2[10])[4]={0};
char (*pArray3[100])[4]={0};
求 sizeof(p)=?, sizeof(*p)=?, sizeof(a)=?, sizeof(a[100])=?
sizeof(&a)=?, sizeof(&a[0])=?, sizeof(b)=?
sizof(pArrya1)=?,sizof(pArrya2)=?,sizof(pArrya3)=?
运行代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int b[100];
int fun(int b[100])
{
int i = sizeof(b);
return i;
}
int _tmain(int argc, _TCHAR* argv[])
{
int *p = NULL;
int a[100];
cout<<"sizeof(p)= "<<sizeof(p)<<endl;
cout<<"sizeof(*p)= "<<sizeof(*p)<<endl;
cout<<"sizeof(a[100])= "<<sizeof(a[100])<<endl;
cout<<"sizeof(a)= "<<sizeof(a)<<endl;
cout<<"sizeof(&a)= "<<sizeof(&a)<<endl;
cout<<"sizeof(&a[0])= "<<sizeof(&a[0])<<endl;
cout<<"sizeof(b)= "<<sizeof(fun(b))<<endl;
char (*pArray1)[4]={0};
char (*pArray2[10])[4]={0};
char (*pArray3[100])[4]={0};
cout<<"sizof(pArrya1)= "<<sizeof(pArray1)<<endl;
cout<<"sizof(pArrya2)= "<<sizeof(pArray2)<<endl;
cout<<"sizof(pArrya3)= "<<sizeof(pArray3)<<endl;
return 0;
}
三、个人理解
sizeof§:指的是指针*p地址的大小,32位系统,大小为4字节
sizeof(*p):指指针类型大小,int位4字节
sizeof(a[100]):指int类型大小
sizeof(a):指整块数组内存的大小
sizeof(&a)和sizeof(&a[0])都是计算指针变量的大小,在32位系统下,指针变量占4个字节
后面与上大同小异。