内存分布简介

typedef struct{ char *name; char suid[8]; int numUnits; } student; student friends[4]; 1 friends[0].name = friends[2].suid + 3; 2 friends[5].num Units = 21; 3 strcpy(friends[1].suid, "4041554"); 4 strcpy(friends->name, "Tiger Woods"); 5 strcpy((char *) &friends[0].num Units, (const char *) &friends[2].numUnits); 6 看这个结构体，它有三个变量：name是一个指向串的指针，suid是一个字符数组名，numUnits是一个整形的变量，每个student结构体占用的内存空间是：name：4；suid：8；numUnits：4；共16个字节. 1定义了四个student结构体，在内存中划出了4*16字节大小的空间 2表示把第三个结构体的suid字符数组的第三个字符的地址，赋值给第一个结构体的name指针 3是说以数组friends首地址为基准向后偏移16*5个字节达到第六个结构体的首地址，虽然这个地址未分配但是仍然可以使用，然后赋值21给这个结构体的numUnits变量 4可以这样理解把长度为七的一个串复制到第20个字节的首地址，如果friends的值为0 5表示在某个内存空间开辟一个大小为12字节的空间存放串“Tiger Woods”，然后把它复制到第1个字节开始的地方写入结束于第一个结构体的suid的最后一个字符，就是地址为12 6是说提取第三个结构体的numUnits的首地址也就是60，把它转化为字符串型的地址，就是把numUnits中的整形化为字符型，然后复制到第一个结构体的numUnits的首地址12上，复制之前需把它转化成为字符型地址.