sizeof

sizeof返回一条表达式或一个类型名字所占的字节数,满足右结合率。
sizeof的运算对象有两种形式:

Sales_data data,*p;
// sizeof (type)
sizeof (Sales_data)
// sizeof expr
sizeof data;

sizeof运算符的结构部分依赖于其作用的类型:
1、对char或者类型为char的表达式执行sizeof运算,结果得1;

	char c;
	int a1 = sizeof(char);     //a1 = 1;
	int a2 = sizeof(c);        //a2 = 1;

2、对引用类型执行sizeof运算得到被引用对象所占空间的大小

	double val = 3.1415926;
	double &a = val;
	int len = sizeof a;    // len = 8 = sizeof(val) = sizeof(double);

3、对指针执行sizeof运算得到指针本身所占空间的大小
4、对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需要有效;

	double val = 3.1415926;
	double *p = &val;
	int len1 = sizeof p;     //len1 = 4
	int len2 = sizeof *p;   //len2 = 8;

5、对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。(sizeof运算不会把数据转换成指针来处理)

	int Myarray1[] = {1,2,3,4,5,6};
	int size_ = sizeof(Myarray1);    //  size_ = 24  
//size_ = sizeof(Myarray1[1])+sizeof(Myarray1[2])+sizeof(Myarray1[3])+sizeof(Myarray1[4])+
//sizeof(Myarray1[5])+sizeof(Myarray1[6])
    int len =  sizeof(Myarray1)/ sizeof(*Myarray1); // len = 6;
    //数组的大小除以单个元素的大小得到数组中元素的个数
	int Myarray2[][3] = {1,2,3,4,5,6};
	int rows = sizeof(Myarray2)/sizeof(*Myarray2);     //rows = 2;

6、对string对象或vector对象指向sizeof运算只返回该类型固定部分的大小,不会计算对象中元素占用了多少空间。

	vector v2;
	string s2;
	while(getline(cin,s2))
	{
		v2.push_back(s2);
	}
	int a = sizeof(v2);       //无论输入的字符串有多长,a始终是16;

你可能感兴趣的:(C++学习笔记)