程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言關鍵字之sizeof

C語言關鍵字之sizeof

編輯:關於C語言

C語言關鍵字 sizeof 是一個操作符,返回對象或類型所占內存字節數,類型為size_t(定義在<stddef.h>),有2種用法:

  • sizeof unary-expression
  • sizeof (type-name)

sizeof不能應用的場合:

  • an expression that has function type or an incomplete type
  • the parenthesized name of such a type
  • an expression that designates a bit-field member

如果操作數的類型是VLA (variable length array),要進行evaluate;否則不需要evaluate,結果是一個整形常量。

示例1 進程間通信 比如storage allocator 和 I/O system

  * *dp = alloc( *dp);

示例2 計算數組中元素個數

 array /  array[]

示例3 VLA大小計算

 <stddef.h> b[n+]; 
    b; 
= fsize3(); 
   

 

ANSI C規定字符型1字節,其余sizeof的返回結果與編譯器實現相關。在32位系統中:

1. 基本類型

_Bool 1

char 1

short 2

int 4

long 4

long long 8

float 4

double 8

long double 12

_Complex 16

void 1

2. 指針

4

3. 枚舉

4

4. 數組

數組長度 * 數組成員size

5. 結構體

字節對齊值:ALIGN
基本類型成員:SIZE

每個成員相對於結構體首地址的偏移都是min(ALIGN, SIZE)的整數倍,可能在成員間加填充字節
結構體總大小為min(ALIGN, SIZEmax)的整數倍,可能在最後一個成員後加填充字節

6. 聯合

規則類似struct

 

測試程序:

 <stdio.h><complex.h>

 SIZEOF(x) printf("size of '%s' is %zd\n", #x, (x));

  ); 
* (*)()); 
 []); 
    SIZEOF( [ {}); 
    SIZEOF( { { c;  s;}); 
    SIZEOF( { i;  { i;  pack(push)
 pack(1) { i;  pack(pop) { d;  c;}); 
 { c1:;  :;  c2:;}); 
    SIZEOF( { i:;  c: { { i;  c;};  { { s1;  c;};  { c2;  { s1;  c1;};  c;  i;}); 
     

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved