sizeof运算符

sizeof运算符返回一条表达式或一个类型名字所占的字节数,sizeof运算符满足右结合律,其所得的值为一个size_t类型的常量表达式,运算符的运算对象有两种形式:
sizeof(type)
sizeof expr
在第二种形式中,sizeof返回的是表达式结果类型的大小。sizeof并不实际计算运算对象的值:
Sales_data,*p;
sizeof(Sales_data);		//存储Sales_data类型的对象所占的空间大小
sizeof data;			//data类型的大小,即sizeof(Sales_data)
sizeof p;				//指针所占空间的大小
sizeof *p;				//p所指类型的空间大小,即sizeof(Sales_data);
sizeof data.revenue;	//Sales_data中revenue成员对应类型的大小
sizeof Sales_data::revenue;	//另一种获取revenue大小的方式


1, sizeof满足右结合律并且与*运算符的优先级一样,表达式按照从右向左的顺序组合,故 sizeof *p 与sizeof(*p)是等价
2, sizeof不会实际求运算对象的值,因此p即使是一个无效的指针也不会有什么影响,在sizeof的运算对象中解引用一个无效指针仍然是一种安全的行为,且指针实际上并没有 被真正使用;  sizeof不需要真的解引用指针也能知道他所指向对象的类型
3,通 常情况我们只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提供一个具体的对象,因为要想知道类成员大小无须真的获取该成员


sizeof运算符的结果依赖于其作用的类型:
1,对于char或者类型为char的表达式执行sizeof运算符,其结果为1
2,对引用类型执行sizeof运算得到被引用对象所占空间的大小
3,对指针执行sizeof运算得到指针本身所占空间的大小
4,对解引用指针执行sizeof运算得到指针指向的  对象所占空间的大小,指针不需有效
5,对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有元素执行一次sizeof运算所得到的结果的和;sizeof不会吧数组转换成指针来处理

6,对string对象或者vector对象执行sizeof运算值返回该类型固定部分的大小,不会计算对象中的元素占用多少空间

数据测试:

#include "stdafx.h"
#include<iostream>
using std::cout;
using std::endl;
void fun(int *p)
{
	cout << "在函数中" << sizeof(p) << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int a[10];
	int *p = new int[10];
	char *p1 = "asgcns";
	char a1[] = "asfskf";
	
	cout << "p1大小  " << sizeof(p1) << endl;	//4		指针所占的空间大小
	cout << "*p1长度" << sizeof(*p1) << endl;	//1		指针所指类型的空间大小,char类型所占空间大小为1
	cout << "p1长度" << strlen(p1) << endl;	//6
	cout << endl;

	cout << "a1[]大小" << sizeof(a1) << endl;	//7		
	cout << "a1[]长度" << strlen(a1) << endl;	//6
	cout << endl;

	cout << "数组名" << sizeof(a) << endl;	//40	求的是整个数组所占空间的大小
	cout << endl;

	cout << "指针" << sizeof(p) << endl;		//4
	cout << "sizeof(int)   " << sizeof(int) << endl;	//4
	cout << "sizeof(char)   " << sizeof(char) << endl;	//1
	fun(a);	//4
	fun(p);	//4
	printf("hello world\n");
	return 0;
}
结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值