(1)sizeof不是函数,它只是一个操作符(operator)。
(2)sizeof的作用是返回一个对象或者类型所占的内存字节数,它的返回值的类型是size_t类型,而size_t是在头文件stddef.h中定义的。size_t这是一个依赖于编译系统的值,一般定义为
「typedefunsignedintsize_t;」,也就是无符号整型。
(3)sizeof有三种语法形式,如下:
1)sizeof(object);//sizeof(对象);
2)sizeof(type_name);//sizeof(类型);
3)sizeofobject;//sizeof对象;
所以,
sizeof( i ); // ok
sizeof i; // ok
sizeof( int ); // ok
sizeof int; // error
既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,只用写法1就行了!
(4)说回你的提问,既然sizeof的返回值是unsignedint型,那么很明显可以用%u、%o、%x来输出,这三个都是无符号整型的格式符,分别对应十进制、八进制、十六进制。
(5)而%zd是修饰符z与有符号十进制整型格式符%d组合而成的格式符,表示按size_t的类型来输出。那么,肯定,%zd可以用来输出sizeof的返回值。
(6)而%d是按有符号整型来输出数值,所以与unsignedint的表示范围是不一样的,如果sizeof的返回值超出了%d的表示范围的话,是会输出一个不正确的数值的。
总结一下:sizeof的返回值可以用%u、%o、%x、%zd来正常输出,而用%d的时候需要注意返回值是否会超出%d(即signedint型)的表示范围。
另外,有的操作系统或编译器里,size_t的类型可能是longunsignedint型,所以输出sizeof的返回值的时候,应该用%lu等。
以上,如有帮助,烦请点采纳,谢谢!