c语言中的结构体指针类型的cast

1.我们在c语言中会经常碰到强制类型转换。

在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast)。

简单的介绍一下:

 首先我们要知道一个结构的指针,并且 在这个结构体中,第一个结构成员必须也是一个结构体(最好是结构体类型).

那么我们可以这个结构体指针转换为指向这个结构体中第一个成员结构体的指针。

直接看代码:

************************************
 /*              struct transform for struct point                                                                                           
  2  *              author lkk
  3  *              time  2015-5-2
  4  *              inclcude a struct point
  5  */
  6 /*
  7  *  first a main struct vx_image( the key to include sub-struct) point
  8  *  we need transform the struct type to place first in the main struct
  9  *  some other struct 
 10  *
 11  */
 12  
 13 #include <stdio.h>
 14 // define vx_ref
 15 typedef struct _vx_ref{
 16         int a;
 17 }vx_ref_t;
 18 typedef struct _vx_ref *vx_ref;
 19 //define vx_scale
 20 typedef struct _vx_scale{
 21         int ab;
 22 }vx_scale_t;
 23 typedef struct _vx_scale *vx_scale;
 24 //define vx_image include the two struct vx_ref vx_scale
 25 typedef struct _vx_image {
 26         vx_ref_t ab;
 27         vx_scale_t ac;
 28         int b;
 29 }vx_image_t;
 30 typedef struct _vx_image *vx_image;
 31 //the main
 32 void main()
 33 {
 34         vx_image a;  //define a point to vx_image pointer
 35         a->ab.a = 1;// put to assignment of  sub_struct 
 36         a->ac.ab = 2;
 37         printf("********the old value*********\n");
 38         printf("the main struct value is %d  %d:\n",a->ab.a,a->ac.ab);
 39         printf("the transform first structure\n");
 40         vx_ref p = (vx_ref)a;// make the main struct pointer point to sub_strcut
 41 //      printf("the transform second structure\n");
 42         printf("the is %d\n",p->a);//output
 43 //      printf("we try\n");
 44 //      vx_scale q = (vx_scale)a;
 45 //      printf("the is %d ",a->ab);//output
 46  
 47 }
 48 // the conclusion 
 49 //in the main struct include some sub_strcut 
 50 //we can use first sub_struct pointer to cast(强制转换) the main structure pointer
 51 // example : sub_strcut pointer = (sub_struct) (the main structure pointer)                                                                 
 52 //so we get sub_struct pointer.
 53 //only by first point

  运行结果:

********the old value*********
the main struct value is 1 2:
the transform first structure
the is 1

刚好和自己的想法是一样的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。