C++结构体运用.和->的区别

本文详细介绍了在C++中如何使用指针访问类成员的方法。通过对比指针对象和一般对象的不同,阐述了使用箭头操作符(>>)与点操作符(.)的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中当定义类对象是指针对象时候,就需要用到->指向类中的成员;
当定义一般对象时候时就需要用到"."指向类中的成员. 
例如:

class   A
{
    public   play();
};
如果定义如下:
    A   *p则:p->play()使用;
    A   p 则:p.paly()使用;

主要的区别就在于 在主函数中定义时,你将对象定义为什么类型。

### WRITE_REG 宏定义及其用法 在嵌入式编程中,`WRITE_REG` 是一种常见的宏定义形式,用于向硬件寄存器写入数据。这种技术通常被用来简化代码结构并提高可读性维护性。以下是 `WRITE_REG` 的典型实现方式: ```c #define WRITE_REG(addr, value) (*((volatile uint32_t *)(addr)) = (value)) ``` 此宏的作用是通过指针解引用的方式将指定的值 `(value)` 写入到特定地址 `(addr)` 所对应的内存位置上[^1]。 当涉及到 UART 处理时,`UartHandle.Instance->DR` 可能是一个指向串口设备的数据寄存器(Data Register)。具体来说,在许多微控制器架构中,UART 数据寄存器负责存储待发送或已接收的数据字节。因此,如果要利用上述提到的 `WRITE_REG` 来操作该寄存器,则可以这样调用它: ```c WRITE_REG(&(UartHandle.Instance->DR), data); ``` 这里假设 `data` 表示准备传输给目标外设的一个字符或者整数类型的变量[^2]。 需要注意的是实际应用中的细节可能会因具体的处理器体系结构而有所不同;例如某些平台可能还需要考虑端序问题或者是额外的状态位设置等等情况。 另外关于C++应用于内核级开发存在争议性的观点已被提及过,“编写核心部分采用C++被认为是非常愚蠢的做法”,这反映了高级特性如异常处理机制、RTTI运行时类型识别等功能可能导致不可预测的行为从而影响性能稳定性等问题的存在。 尽管如此,在现代项目实践中合理运用模板元程序设计等优势仍然能够带来一定好处只要谨慎对待潜在风险即可。 ### 使用实例 下面给出一段简单的例子来展示如何结合两者完成一次基本的异步通信过程: ```c #include <stdint.h> // 假定已经正确定义了 UartHandle 结构体及其实例化对象 Instance typedef struct { volatile uint8_t DR; // Data register for simplicity. } UART_Type; UART_Type* const UartHandle_Instance = ... ; void uart_send_char(char c){ WRITE_REG(&UartHandle_Instance->DR,c); } ``` 在此基础上扩展功能比如字符串打印就变得相对容易多了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值