Sizeof

sizeof是编程语言C语言和C++中的操作符。它能表示資料類型或對象的存储大小（內存字節數），存储大小以一個char大小的单位來衡量。因此sizeof (char)等於1 。被計算的数据类型不仅可以是原始型別，例如整数和浮点类型，还可以是指针类型和复合数据类型（联合体、结构体和 C++类）。

语法
sizeof返回的是size_t数据类型。对于变量作为运算数，可以不加括号；对于数据类型作为运算数，必须加括号。例如：
char c;
printf ("%zu,%zu\n", sizeof c, sizeof (int));

C++11使用该运算符返回可变参数模板的参数个数：
template <typename... Args>
std::size_t GetSize (Args&&... args)
{
    /* Get size of parameter pack.*/
    std::size_t Count= sizeof... (args);
    return Count;           
}

C99支持结构的“可灵活数组”（flexible array）成员：返回結構中包含padding，但不包括“可灵活数组”的佔用空間，此時的功能如同 offsetof(flexarray, array)。
#include <stdio.h>

struct flexarray {
    char val;
    int array[];  /* Flexible array member; must be last element of struct */
};

int main(int argc, char **argv)
{
    printf("sizeof (struct flexarray) == %zu\n", sizeof (struct flexarray)); //通常结果为：sizeof (struct flexarray) == 4
    return 0;
}
C99还支持动态长度数组，其长度在运行时确定：
#include <stddef.h>

size_t flexsize(int n)
{
   char b[n + 3];   /* Variable length array */
   return sizeof b;  /* Execution time sizeof */
}

int main(void)
{
  size_t size = flexsize(10); /* flexsize returns 13 */
  return 0;
}

C++11支持获取类的成员的尺寸，不必实例化出对象：
#include <iostream>

struct foo {
  int a;
  int b;
};

int main ()
{
  std::cout << sizeof foo::a << "\n" << sizeof (foo) << "\n";
}

参考文献

Category:带有C代码示例的条目
Category:C++
Category:C語言
Category:运算符_(编程)