C/C++中:sizeof的用法

版权声明:请尊重原创成果,未经允许,禁止转载 https://blog.csdn.net/qq_31441951/article/details/86616927

一、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个字节
后面与上大同小异。

猜你喜欢

转载自blog.csdn.net/qq_31441951/article/details/86616927