在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】

news/2024/11/19 7:13:13/

在Qt(以及C++)中,& 和 * 是两个至关重要的符号,它们用于处理引用和指针。我们将逐个解释这两个符号,并提供简单示例来说明它们的用法。

1. 引用(&

  • 定义: 引用是一种别名,它不是变量的副本,而是对现有变量的引用。使用引用时,不会创建新的变量,而是直接操作原始变量。

  • 语法:

    int& ref = original; // ref 是 original 的引用 
  • 特性:

    • 无须解引用: 你可以直接使用引用的名字,就像使用变量一样。
    • 不能为 nullptr: 引用必须永远引用一个有效对象。引用在初始化后不能被重新赋值。
  • 示例:

    void increment(int &value) {value++; // 直接修改原始变量 
    }int main() {int num = 5; increment(num); // 传递 num 的引用 qDebug() << num; // 输出 6 return 0; } 

2. 指针(*

  • 定义: 指针是一个变量,其值是另一个变量的地址。指针可以指向对象、数组、函数等,并且可以被重新赋值以指向不同的变量。

  • 语法:

    int* ptr = &original; // ptr 是指向 original 的指针

  • 特性:

    • 需要解引用: 使用指针时,你需要使用 * 来访问指针所指向的值。
    • 可以为 nullptr: 指针可以不指向任何有效对象,这通常用 nullptr 表示。
  • 示例:

    void setToTen(int *ptr) {*ptr = 10; // 修改指针所指向的值 
    } 
    int main() {int num = 5;setToTen(&num); // 传递 num 的地址 qDebug() << num; // 输出 10 return 0; 
    } 

3. 引用与指针的主要区别

  • 语法:

    • 使用引用时,无需解引用,也不需要使用 & 获取地址。
    • 使用指针时,必须使用 * 来解引用,并且使用 & 来获取变量的地址。
  • 初始化:

    • 引用必须在声明时初始化,并且之后不能再指向其他变量。
    • 指针可以随时被重新赋值为指向其他地址的变量。
  • 内存管理:

    • 引用在内存管理方面通常更安全,因为你不能将其指向无效内存。
    • 指针需要小心管理,特别是在动态内存分配时,以防止内存泄漏和悬空指针。

4. 总结

  • 使用 & 声明引用,引用是直接的别名;使用 * 声明指针,指针是地址的存储器。
  • 引用提供一种更安全和简洁的方式来处理对象,而指针提供更多的灵活性但需要多一些小心。

希望以上解释清晰阐述了 & 和 * 的含义和用途!如果还有其他问题,欢迎继续提问。


http://www.ppmy.cn/news/1548179.html

相关文章

Qt ini文命名分析和命名规范实例

在 Qt 中使用 QSettings 保存到 .ini 文件时&#xff0c;键名的格式设计非常重要&#xff0c;既要清晰又要适应扩展性需求。以下是一些键名格式建议和设计规则&#xff1a; 1. 键名的基本设计规则 分层结构&#xff08;分组&#xff09; 使用 / 或 . 表示分层结构&#xff0c;便…

scikit-learn学习Day30

1.数据集划分 import numpy as np from sklearn.datasets import load_iris import pandas as pd arr load_iris() data arr.data target arr.target print(target) n_target target.reshape(len(target),1) print(n_target) n_data np.hstack([data,n_target]) print(n_…

python+Django+MySQL+echarts+bootstrap制作的教学质量评价系统,包括学生、老师、管理员三种角色

项目介绍 该教学质量评价系统基于Python、Django、MySQL、ECharts和Bootstrap技术&#xff0c;旨在为学校或教育机构提供一个全面的教学质量评估平台。系统主要包括三种角色&#xff1a;学生、老师和管理员&#xff0c;每个角色有不同的功能权限。 学生角色&#xff1a;学生可…

BLE 蓝牙客户端和服务器连接

蓝牙通信在设计小型智能设备时非常普遍&#xff0c;之前一直没有使用过&#xff0c;最近使用ardunio ESP32 做了一些实验&#xff0c;做了一个收听播客的智能旋钮&#xff08;Smart Knob&#xff09;&#xff0c;它带有一个旋转编码器和两个按键。 本文介绍BLE 服务器Server和W…

【AIGC】如何使用高价值提示词Prompt提升ChatGPT响应质量

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;提示词英文模板&#x1f4af;提示词中文解析1. 明确需求2. 建议额外角色3. 角色确认与修改4. 逐步完善提示5. 确定参考资料6. 生成和优化提示7. 生成最终响…

学习threejs,使用AnimationMixer实现变形动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AnimationMixer 动画…

#define定义宏(2)

大家好&#xff0c;今天给大家分享两个技巧。 首先我们应该先了解一下c语言中字符串具有自动连接的特点。注意只有将字符串作为宏参数的时候才可以把字符串放在字符串中。 下面我们来讲讲这两个技巧 1.使用#&#xff0c;把一个宏参数变成对应的字符串。 2.##的作用 可以把位…

AIGC----生成对抗网络(GAN)如何推动AIGC的发展

AIGC: 生成对抗网络(GAN)如何推动AIGC的发展 前言 随着人工智能领域的迅猛发展&#xff0c;AI生成内容&#xff08;AIGC&#xff0c;AI Generated Content&#xff09;正成为创意产业和技术领域的重要组成部分。在AIGC的核心技术中&#xff0c;生成对抗网络&#xff08;GAN&am…