#include<iostream.h>
#include <stdio.h>
#include <stdlib.h>

int  p_t[]={0,1,2,3};

typedef struct chann_s
{
 int num1;
 int num2;
}chann_t;


typedef struct mpoaChann_s
{
 chann_t chan;
 int num3;
 int num4;
}mpoaChann_t;

void main()
{
 chann_t p;
 chann_t *p1;
 mpoaChann_t q;
 mpoaChann_t *q1;
 
 p.num1=5;
 p.num2=6;
 q.num3=7;
 q.num4=8;


 p1=&p;
 q1=&q;

q1=(mpoaChann_t *)p1;//注意这条语句

 cout<<q1->chan.num1<<endl;
 cout<<q1->chan.num2<<endl;
 cout<<q1->num3<<endl;
 cout<<q1->num4<<endl;

 q1=(mpoaChann_t *)p_t;//注意这条语句
 cout<<q1->chan.num1<<endl;
 cout<<q1->chan.num2<<endl;
 cout<<q1->num3<<endl;
 cout<<q1->num4<<endl;
 
}

输出结果

5

6

1310656
4208553
0

1

2
3

分析结果:结构体类型强制转换,用mopaChann_t的结构,去套chann_t的地址空间。

p1(chann_t)    q1(mpoaChann_t)
--------               ---------------
num1
--------                chann_t变量
num2
--------               ---------------
 未知                   num3
--------               ---------------
 未知                   num4
--------               ---------------

再次用mopaChann_t的结构,去套p_t的地址空间。
p_t  q1(mpoaChann_t)
--------               ---------------
   0

--------                chann_t变量
   1

--------               ---------------
   2                      num3
--------               ---------------
   3                      num4
--------               ---------------