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]