六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 24|回复: 0

C的sizeof函数

[复制链接]

升级  84.67%

53

主题

53

主题

53

主题

秀才

Rank: 2

积分
177
 楼主| 发表于 2013-1-26 12:28:44 | 显示全部楼层 |阅读模式
#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 ;} 


 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表