|
#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 ; float f ; 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[10]){ printf("in functin aizeof(a[10])=%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)) ; long l ; 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[10] ; printf("sizeof(a[10])=%d\n",sizeof(a)) ; array(a) ; return 0 ;}

|
|