首先了解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定义的和常量如上面的例子。