美丽的小岛 发表于 2013-1-26 12:28:44

C的sizeof函数

#include<stdio.h>/*关于数据结构的求大小的情况:#pragma pack(push)#pragma pack(8)#pragma pack(pop)(1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;(2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);(3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。*/typedef struct t{int i ;char c ;struct t *next ;}t;typedef struct t1{   char c ;   int b ;   floatf ;   double d ;//8字节的double}t1;typedef struct t2{   t1 t ;   char s ;   int ii ;}t2 ;int type_test(){   printf("a") ;   return 100 ;}void type_test2(){}void array(int a){   printf("in functin aizeof(a)=%d\n",sizeof(a)) ;//这个变成了指针}int main(){//基本类型   char c ;   printf("sizeof(c)=%d\n",sizeof(c)) ;   short int si ;   printf("sizeof(si)=%d\n",sizeof(si)) ;   int b ;   printf("sizeof(b)=%d\n",sizeof(b)) ;   float f ;   printf("sizeof(f)=%d\n",sizeof(f)) ;   longl ;   printf("sizeof(l)=%d\n",sizeof(l)) ;   long long ll ;   printf("sizeof(ll)=%d\n",sizeof(ll)) ;   double d ;   printf("sizeof(d)=%d\n",sizeof(d)) ;//结构体   printf("\n") ;   printf("sizeof(t)=%d\n",sizeof(t)) ;   printf("sizeof(t1)=%d\n",sizeof(t1)) ;   printf("sizeof(t2)=%d\n",sizeof(t2)) ;//函数   printf("\n") ;   printf("sizeof(type_test())=%d\n",sizeof(type_test())) ;//这个函数并没有调用   printf("sizeof(type_test)=%d\n",sizeof(type_test)) ;   printf("sizeof(type_test2())=%d\n",sizeof(type_test2())) ;//指针,32bit的机器,所以所有的Poiter都是4字节的大小    printf("\n") ;   char* pc = "abc";   int* pi;   char** ppc = &pc;   double *dp ;   printf("char pointer:%d\n",sizeof(pc));// 结果为4   printf("int pointer:%d\n",sizeof(pi));// 结果为4   printf("char pointer pointer:%d\n",sizeof(ppc)); // 结果为4   printf("double pointer:%d\n",sizeof(dp));// 结果为4//数组   printf("\n") ;   int a ;   printf("sizeof(a)=%d\n",sizeof(a)) ;   array(a) ;   return 0 ;} 

http://dl.iteye.com/upload/attachment/0071/7492/334a5127-c39d-33ab-a68e-84c402822d2e.bmp
 
页: [1]
查看完整版本: C的sizeof函数