sizeof 不是一个宏,不是函数,是一个运算符(内置的操作符),和加’+’,减‘-’等一样
由编译器实现,目的是以字节为单位返回运算对象大小,
运算对象可以是具体的数据对象(如变量名)或者数据类型。
——《C Primer Plus 》(sixth enditon)5.3.1小节
关于sizeof的两个精巧的宏实现。
非数组的sizeof:
#defne _sizeof(T) ( (size_t)((T*)0 + 1))
数组的sizeof:
#define array_sizeof(T) ( (size_t)(&T+1) - (size_t)(&T) )
原理就是c/c++中的指针运算。
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a, b, c, d;
a = sizeof("123456789"); //a为10 此时"123456789"类型为char [10],字符串常量
b = sizeof("123456789" + 1); //b为4 此时"123456789"类型为char *
//注意sizeof里面的表达式不会被计算,但是影响sizeof对数据类型的推断
本质上sizeof只计算数据类型的大小
//如字符串类型,结构体类型,指针类型,以及一些内建基本类型
cout << typeid("123456789").name() << endl;//char const [10]
cout << typeid("123456789" + 1).name() << endl;//char const *
//strlen在标准库中实现,作用是计算字符串长度——字符个数,不包括'\0'。
c = strlen("123456789"); //c为9
d = strlen("123456789" + 1); //d为8
//这里"123456789"也是char *,加1后指向了'2',所以只剩下8个
cout << a << b << c << d<< endl;
int i = 10;
cout << i << endl;
cout << sizeof(++i) << endl;//4,这里等价于sizeof(int)
cout << i << endl;
}