跳至內容

Sizeof

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

sizeof是程式語言C語言C++中的運算子。它能表示資料類型或對象的儲存大小(主記憶體位元組數)[1],儲存大小以一個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";
}

參考文獻

[編輯]