C/C++基础之sizeof使用


C/C++基础之sizeof使用

文章插图
 
在 C/C++ 中 , sizeof() 是一个判断数据类型或者表达式长度的运算符 。
1 sizeof 定义sizeof 是 C/C++ 中的一个操作符(operator) , 返回一个对象或者类型所占的内存字节数 。
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t. ——来自MSDN
其返回值类型为 size_t  , 在头文件 stddef.h 中定义为: typedef unsigned int size_t;
从sizeof 的定义可以看出:sizeof 不是一个函数 , 因为函数调用必须有一对括号 。
#include <stdio.h>//公众号:C语言与cpp编程int main(void){   int num = 97;   printf("sizeof(num = 0)的值:%dn",sizeof(num = 0));      printf("num 的值:%dn",num);      return 0;}
C/C++基础之sizeof使用

文章插图
 
运行结果为4 , 97;并不是4 , 0
说明:sizeof 不是标准意义上的一元操作符 , 不支持链式表达式 , sizeof 作用域范围内的语句不会编译成机器码 , 如 sizeof(num++) 中的 ++ 不执行 。sizeof 也不是函数 ,  sizeof 更像一个特殊的宏 , 在编译阶段求值 。
2 sizeof 用法sizeof 有两种语法形式 , 如下:
sizeof(type_name);    //sizeof(类型);sizeof (object);      //或sizeof object 都属于 sizeof对象;所以:
int i;sizeof(i);    //合理sizeof i;     //合理sizeof(int);  //合理sizeof int;   //不合理
  • 对类型使用 sizeof 时 , sizeof type_name 是非法的 , 必须写为 sizeof(type_name);
  • 无论是对对象还是类型取值 , sizeof () 这种形式都是对的;
1 基本数据类型的 sizeof这里的基本数据类型是指short、int、long、float、double这样的简单内置数据类型 。
由于它们的内存大小是和系统相关的 , 所以在不同的系统下取值可能不同 。
#include <IOStream>using namespace std; int main(){   cout << "Size of char : " << sizeof(char) << endl;   cout << "Size of int : " << sizeof(int) << endl;   cout << "Size of short int : " << sizeof(short int) << endl;   cout << "Size of long int : " << sizeof(long int) << endl;   cout << "Size of float : " << sizeof(float) << endl;   cout << "Size of double : " << sizeof(double) << endl;   cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;   return 0;}在 32 位系统下内置数据类型与其 sizeof 运算结果如下:
Size of char : 1Size of int : 4Size of short int : 2Size of long int : 4Size of float : 4Size of double : 8Size of wchar_t : 4
  • unsigned 不影响内置类型 sizeof 的取值
2 指针类型的 sizeof指针主要用于存储地址 , 前几天文章C语言指针详解提到过 , 指针变量的位宽等于机器字长 , 机器字长由 CPU 寄存器位数决定 。在 32 位系统中 , 一个指针变量的返回值为 4 字节 ,  64 位系统中指针变量的 sizeof 结果为 8 字节 。
char *p =”hello”; sizeof( p );       // 结果为4 sizeof(*p);        // 结果为1 int *pi; sizeof( pi );      //结果为4 sizeof(*pi);       //结果为4 char **pp = &p; sizeof( pp );      // 结果为4 sizeof( *pp );     // 结果为4 


推荐阅读