#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
-------- ---------------