分清定义性声明和引用性声明

本文深入解析编程中定义与声明的区别,通过示例代码详细解释定义性声明和引用性声明的概念,帮助开发者准确理解变量作用域和生命周期。
部署运行你感兴趣的模型镜像

在我们日常的代码编写中,可以说处处能见到变量的声明。但是,我们中有些新同学不能真正明白“定义”和“声明”的区别,常常随便叫。定义的全称是定义性声明(defining declaration),是一种特殊的声明,也就是说定义是包含在声明内的。声明通常指的是引用性声明(referencing declaration),为了方便区分定义。

func1()
{
//定义性声明(defining declaration),俗称“定义”
//建立了存储空间
int i;
}

func2()
{
//引用性声明(referencing declaration),俗称“声明”
//没有建立存储空间,只是为了在定义之前使用
extern int i;
}

总之,关键就是看有没有建立存储空间。



您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在I2C通信协议中,主机从机的角色区分主要基于其对总线的控制能力以及功能特。I2C协议支持多主控(multi-mastering)架构,这意味着多个设备都可以充当主机角色,但在任何时刻只能有一个设备作为主机来控制总线。 主机的主要功能包括: - **控制时钟信号(SCL)**:主机负责生成时钟信号,该信号决定了数据传输的速度[^2]。 - **生成起始停止信号**:主机通过在SDA线上发送特定的信号序列来启动或结束一次通信过程。起始信号是在SCL为高电平时,SDA从高电平跳变到低电平;而停止信号则是在SCL为高电平时,SDA从低电平跳变到高电平[^1]。 - **发送地址信息**:主机发送从机地址以选择特定的从机进行通信,地址信息包含在起始信号之后发送的第一个字节中,其中最低位表示数据传输方向(读或写)[^2]。 - **管理数据传输**:主机决定数据传输的方向,并在数据传输过程中发送或接收数据字节,同时处理应答(ACK)非应答(NACK)信号[^1]。 从机的主要功能包括: - **响应地址**:从机监听总线上的地址信息,并仅当接收到自己的地址时才会参与通信过程[^2]。 - **根据主机指令进行操作**:从机根据主机发送的读写命令执行相应的数据发送或接收操作[^1]。 - **产生应答信号**:在每个接收到的字节后,从机会发送一个应答信号(ACK)表示成功接收,或者发送一个非应答信号(NACK)表示未能正确接收数据[^2]。 I2C协议的这一设计允许灵活地连接多个设备,并确保在复杂系统中实现高效的数据交换。通过这种方式,主机从机之间的角色明确,确保了通信过程的有序可靠。 ### I2C通信示例代码 以下是一个简单的I2C通信示例代码,演示了如何使用Python的`smbus`库与I2C设备进行基本的读写操作: ```python import smbus # 初始化I2C总线 bus = smbus.SMBus(1) # 使用I2C总线1 # 定义从机地址 slave_address = 0x50 # 假设从机地址为0x50 # 向从机写入数据 def write_data(data): bus.write_byte(slave_address, data) # 从从机读取数据 def read_data(): return bus.read_byte(slave_address) # 示例:写入一个字节的数据 write_data(0xA5) # 示例:读取一个字节的数据 received_data = read_data() print(f"Received data: {received_data}") ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值