通过实例深入理解C/C++结构体/类多级指针的使用
2013-09-07 21:27
405 查看
我们先回忆下结构体成员的引用和指针的基础知识:
(1)原理1:
引用结构体变量的成员的一般方式为: 结构体变量名.成员变量名。
其中,“.”被称为成员运算符。它在所有的运算符中优先级最高,因此可以把“结构体变量名.成员变量名”当成一个整体看待。
(2)原理2:
通过指向结构体变量的指针p, 引用其成员的方式为:(*p).成员变量名
或 p->成员变量名
即:定义指向结构体类型变量的指针变量p:
struct [b]结构体类型 *p,[/b]
则其成员的引用形式为:(1) 指针变量->成员 (2)[b]:(*指针变量).成员变量名[/b]
情形1:
结构体、类的关系如下所示:
A a;
假设,我们得到了结构体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 );
测试代码:
(1)原理1:
引用结构体变量的成员的一般方式为: 结构体变量名.成员变量名。
其中,“.”被称为成员运算符。它在所有的运算符中优先级最高,因此可以把“结构体变量名.成员变量名”当成一个整体看待。
(2)原理2:
通过指向结构体变量的指针p, 引用其成员的方式为:(*p).成员变量名
或 p->成员变量名
即:定义指向结构体类型变量的指针变量p:
struct [b]结构体类型 *p,[/b]
则其成员的引用形式为:(1) 指针变量->成员 (2)[b]:(*指针变量).成员变量名[/b]
情形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; }
相关文章推荐
- JavaSE第七十二讲:通过JUnit深入理解反射与注解的使用方式与情景
- 通过源码深入理解和使用 MyBatis 插件机制
- 对C语言中指针的理解与其基础使用实例
- 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
- 如何使用指针交换两个数的值,深入理解指针
- 通过简单的实例对指针的理解
- 通过2个实例理解:不要返回指向栈内存的指针
- 通过实例深入理解linux shell数组
- Qt线程的简单使用(三)——通过一个实例理解QMutex的使用
- 通过实例深入学习Java的Struts框架中的OGNL表达式使用
- 深入理解 c# 第五章 使用多个委托来捕获多个变量实例
- 通过一道试题深入理解指针及数组内存布局
- ORMLite完全解析(一)通过实例理解使用流程
- main函数参数的使用和指针数组的理解结合实例
- 深入理解C指针学习笔记---多级指针的内存分配问题(五)
- iOS class深入理解: 实例对象、类对象、元类和isa指针
- Qt线程的简单使用——通过一个实例理解QMutex的使用
- C语言的函数中,如何使用指针交换两个数的值,深入理解指针
- Fusion实例1:如何通过竞技场使用共享内存来发布一个指针?
- 通过实例深入理解linux shell数组