sizeof运算符返回一条表达式或一个类型名字所占的字节数,sizeof运算符满足右结合律,其所得的值为一个size_t类型的常量表达式,运算符的运算对象有两种形式:
sizeof(type)
sizeof expr
在第二种形式中,sizeof返回的是表达式结果类型的大小。sizeof并不实际计算运算对象的值:
1, sizeof满足右结合律并且与*运算符的优先级一样,表达式按照从右向左的顺序组合,故 sizeof *p 与sizeof(*p)是等价的
2, sizeof不会实际求运算对象的值,因此p即使是一个无效的指针也不会有什么影响,在sizeof的运算对象中解引用一个无效指针仍然是一种安全的行为,且指针实际上并没有 被真正使用; sizeof不需要真的解引用指针也能知道他所指向对象的类型;
3,通 常情况我们只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提供一个具体的对象,因为要想知道类成员大小无须真的获取该成员
1,对于char或者类型为char的表达式执行sizeof运算符,其结果为1
2,对引用类型执行sizeof运算得到被引用对象所占空间的大小
3,对指针执行sizeof运算得到指针本身所占空间的大小
4,对解引用指针执行sizeof运算得到指针指向的 对象所占空间的大小,指针不需有效
5,对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有元素执行一次sizeof运算所得到的结果的和;sizeof不会吧数组转换成指针来处理
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运算符无须我们提供一个具体的对象,因为要想知道类成员大小无须真的获取该成员
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;
}
结果: