结构体的大小

首先了解32位系统的类型大小:

char 1;short 2;int 4;long 4(long在16位系统也是32,而int是16.64位long为64,int为32);float 4,;double 8;*p 地址 4。

结构体的大小规则:

1、空间是最大‘基本’类型的倍数。

2、以最大‘基本’类型进行区域划分空间,然后分配内存。比如最大类型double,然后划出8*n的空间,然后装数据,

如第一一个结构体:

typedef struct demos

{

      char a;

      short d;
      int b;
      short c;
};

空间是://xx表示为对其而未填充的空间

a,xx,d1,d2,

b1,b2,b3,b4,

c1,c2,xx,xx。

他的长度为12。

typedef struct abc
{
 char a;
 demos b;
}abc1;

空间是:

abc.a,xx,xx,xx,

demos.a,xx,d1,d2,

b1,b2,b3,b4,

c1,c2,xx,xx。16个字节

 

 

char *S="fjakjfjssfa";

S[2]='k';

这是行不通的。程序内存分为5个区,栈,堆(不同于数据结构的堆,可以理解为链表),静态区,常量区,代码区。我们定义一个*S地址放在栈,但是其内容是个常量,他是放在常量区的。

但是以下代码:因为在栈区分配了40的空间来装字符串。

char S[40]="fjakjfjssfa";

S[2]='k';

栈用于缓存局部变量;堆用于动态分配内存;静态区存放全局,静态变量;常量存放const定义的和常量如上面的例子。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值