通过实例深入理解C/C++结构体/类多级指针的使用

我们先回忆下结构体成员的引用和指针的基础知识:

(1)原理1:

引用结构体变量的成员的一般方式为: 结构体变量名.成员变量名。

其中,“.”被称为成员运算符。它在所有的运算符中优先级最高,因此可以把“结构体变量名.成员变量名”当成一个整体看待。

 

(2)原理2:

通过指向结构体变量的指针p, 引用其成员的方式为:(*p).成员变量名 p->成员变量名

即:定义指向结构体类型变量的指针变量p:
struct 结构体类型 *p,

则其成员的引用形式为:(1) 指针变量->成员 (2):(*指针变量).成员变量名

 

情形1:

结构体、类的关系如下所示:

A a;

struct A
{
   B* b;
}

struct B

{
   C c;
}

struct C
{
   int *videoInputCnt;
}

假设,我们得到了结构体A变量a,现在在要从a变量中提取整形数据videoInputCnt。

如何做到呢?

我们的获取顺序是:A->B->C->int VideoInputCount.

步骤如下:

(1)获取b成员.

由于b是A类/结构体的B类型的成员指针,且a 非指针,因此获取b成员的方法为:

        a.b

(2)获取c成员。

由于b是指针变量,根据原理2,获取c的方法为:

(a.b)->c

 

或者:

*(a.b).c.

我们这里选择方式1.

 

(3)获取videoInputCnt.

根据原理1,获取方法为:

*( ( (a.b)->c ).videoInputCnt );

 

测试代码:

#include <stdio.h>

typedef struct C
{
int *videoInputCnt;
}Ctype;


typedef struct B

{
   Ctype c;
}BType;



typedef struct A
{
   BType* b;
}AType;

 
int main(void)
{
   AType a;
   BType b;
   Ctype c;
   
   int InitialValue;
   InitialValue=5;
    c.videoInputCnt = &InitialValue;
   b.c = c;
   a.b = &b;

  int CntOutput1,CntOutput2;
  CntOutput1=  *( ( (a.b)->c ).videoInputCnt );
  printf("VideoCount is %d..\n", CntOutput1);

  CntOutput2=  * ( (a.b)->c ).videoInputCnt ;
  printf("VideoCount is %d..\n", CntOutput2);


   return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值