C++ 中的 sizeof() 运算符

sizeof() 是一个计算数据类型、常量、变量大小的运算符。它是一个编译时运算符,因为它在编译时返回任何变量或常量的大小。

由 sizeof() 运算符计算的大小是计算机中占用的 RAM 量。

sizeof() 运算符的语法如下所示:

句法 (Syntax)

sizeof(data_type);

在上述语法中,data_type 可以是数据的数据类型、变量、常量、联合、结构或任何其他用户定义的数据类型。

sizeof() 运算符可应用于以下操作数类型:

  • 当操作数是数据类型时

如果sizeof()运算符的参数包含变量的数据类型,则sizeof()运算符将返回数据类型的大小。

让我们通过一个例子来理解这个场景。

例子 (Example)

#include <iostream>  
using namespace std;  
int main()  
{  
  // 确定每种数据类型占用的字节空间。 
  std::cout << "整数数据类型的大小:" <<sizeof(int)<< std::endl;  
  std::cout << "浮点数据类型的大小:" <<sizeof(float)<< std::endl;  
  std::cout << "double 数据类型的大小:" <<sizeof(double)<< std::endl;  
  std::cout << "char 数据类型的大小:" <<sizeof(char)<< std::endl;  
  return 0;  
}

在上面的程序中,我们使用 sizeof() 运算符评估了内置数据类型的大小。我们知道 int 占用 4 个字节,float 占用 4 个字节,double 占用 8 个字节,char 占用 1 个字节,同样的结果由 sizeof() 运算符显示,我们可以在下面的输出中观察到。

输出

  • 当操作数是 Class 类型时。

例子 (Example)

#include <iostream>  
using namespace std;  
class Base  
{  
int a;  
};  
int main()  
{  
Base b;  
std::cout << "类基的大小为:"<<sizeof(b) << std::endl;  
return 0;  
}

在上面的程序中,我们评估了类的大小,它有一个整数变量。输出将是 4 个字节,因为 int 变量占用 4 个字节。

输出

如果我们在一个类中再添加一个整数变量,那么代码将如下所示:

例子 (Example)

#include <iostream>  
using namespace std;  
class Base  
{  
    int a;  
    int d;  
};  
int main()  
{  
  Base b;  
  std::cout << "类基的大小为:"<<sizeof(b) << std::endl;  
  return 0;  
}

在上面的代码中,我们又添加了一个整数变量。在这种情况下,类的大小将是 8 个字节,因为int变量占用 4 个字节,所以两个整数变量占用 8 个字节。

输出

如果我们在上面的代码中添加一个 char 变量,那么代码将如下所示:

例子 (Example)

#include <iostream>  
  
using namespace std;  
  
class Base  
{  
    int a;  
    int d;  
    char ch;  
};  
int main()  
{  
  Base b;  
  std::cout << "类基的大小为:"<<sizeof(b) << std::endl;  
    return 0;  
}

在上面的代码中,该类有两个整数变量和一个字符变量。根据我们的计算,类的大小将等于 9 个字节(int+int+char),但是由于结构填充的概念,这是错误的。

输出

  • 当操作数是数组类型时。

例子 (Example)

#include <iostream>  
using namespace std;  
 int main()  
{  
  int arr[]={10,20,30,40,50};  
  std::cout << "数组'arr'的大小是:"<<sizeof(arr) << std::endl;  
  return 0;  
}

在上面的程序中,我们声明了一个包含五个元素的整数类型的数组。我们已经使用sizeof()运算符评估了数组的大小根据我们的计算,数组的大小应该是 20 字节,因为 int 数据类型占用 4 字节,而数组包含 5 个元素,所以这个数组占用的总内存空间为 5*4 = 20 字节。sizeof()运算符显示了相同的结果,我们可以在以下输出中观察到。

输出

让我们考虑另一个数组场景。

例子 (Example)

#include <iostream>  
using namespace std;  
void fun(int arr[])  
{  
    std::cout << "数组大小为:" <<sizeof(arr)<< std::endl;  
}  
int main()  
{  
  int arr[]={10,20,30,40,50};  
  fun(arr);  
  return 0;  
}

在上面的程序中,我们尝试使用函数打印数组的大小。在这种情况下,我们创建了一个整数类型的数组,并将“ arr ”传递给函数fun()fun()返回整数指针的大小,即int*,而 int* 的大小在 64 位操作系统中为 8 个字节。

输出

  • 当操作数是指针类型时。

例子 (Example)

#include <iostream>  
using namespace std;  
int main()  
{  
    int *ptr1=new int(10);  
    std::cout << "ptr1 的大小:" <<sizeof(ptr1)<< std::endl;                                                                                                                                                                                                                                  
   std::cout << "*ptr1 的大小:" <<sizeof(*ptr1)<< std::endl;  
   char *ptr2=new char('a');  
   std::cout <<"ptr2 的大小:" <<sizeof(ptr2)<< std::endl;  
   std::cout <<"*ptr2 的大小:"<<sizeof(*ptr2)<< std::endl;  
   double *ptr3=new double(12.78);  
    std::cout <<"ptr3 的大小:" <<sizeof(ptr3)<< std::endl;  
   std::cout <<"*ptr3 的大小:"<<sizeof(*ptr3)<< std::endl;  
    return 0;  
}

在上面的程序中,我们已经确定了指针的大小。对于所有数据类型,指针的大小将保持不变。如果计算机有 32 位操作系统,那么指针的大小将是 4 字节。如果计算机有 64 位操作系统,那么指针的大小将是 8 字节。我在 64 位上运行这个程序,所以输出是 8 个字节。现在,如果我们为指针提供'*'符号,那么输出取决于数据类型,例如,*ptr1 是整数类型意味着 sizeof() 运算符将返回 4 个字节,因为 int 数据类型占用 4 个字节。

输出

  • 当操作数是表达式时。

例子 (Example)

#include <iostream>  
using namespace std;  
   
int main()  
{  
   int num1;  
   double num2;  
   cout << sizeof(num1+num2);  
     return 0;  
}

在上面的程序中,我们分别声明了 int 和 double 类型的两个变量 num1 和 num2。int 的大小是 4 个字节,而 double 的大小是 8 个字节。结果将是变量,它是占用 8 个字节的 double 类型。

输出

  • 使用社交账号登录,本站支持
全部评论(0)