代码如下:(我的问题都在注释里面)
这个程序主要是从传入地址的存储区中提取出数据结构#include <stdio.h>
typedef void ( *AddrType );
typedef struct
{
char c;
int b;
char e;
int a;
char d[30];
}strHigh;
typedef struct
{
char cc;
char ee;
int bb;
int aa;
char dd[30];
strHigh High1;
}strLow;void mmm(AddrType *Come)
{
char *addr;
int i = 0;
addr = (char *)Come; printf("%x,%c\n",addr,*addr);
addr += sizeof(char); printf("%x,%c\n",addr,*addr);
addr += sizeof(char)+2;/*在此处只有加2后的地址才是下一个整型的地址,为什么?*/

printf("%x,%d\n",addr,*addr);
addr += sizeof(int);

printf("%x,%d\n",addr,*addr);
addr += sizeof(int); printf("%x,",addr);
for(i=0;i<30;i++)
{
if(*addr=='\0')
break;
printf("%c",*addr);
addr += sizeof(char);
}
printf("\n");
addr += ((30-i+2)*sizeof(char));/*此处也是,为什么(30-i+2),为什么要加2?*/ printf("%x,%c\n",addr,*addr);
addr += sizeof(char)+3;/*此处却为什么要加3?*/ printf("%x,%d\n",addr,*addr);
addr += sizeof(int); printf("%x,%c\n",addr,*addr);
addr += sizeof(char)+3;/*为什么要加3?我都快被弄糊涂了*/ printf("%x,%d\n",addr,*addr);
addr += sizeof(int); printf("%x,",addr);
for(i=0;i<30;i++)
{
if(*addr=='\0')
break;
printf("%c",*addr);
addr += sizeof(char);
}
printf("\n");
}
void main(void)
{
strLow Low = {'a','f',2,4,"ghrgrth",{'e',7,'t',8,"nhgjh34terew"}};
mmm(&Low);
}