当前位置: 首页 > news >正文

Rust星号(*)的作用-基础篇

在Rust中,*符号具有多种不同的用途,具体取决于它的使用方式。以下是Rust中*常见的用法.

1.解引用指针

当作为一元运算符放在指针变量之前时,*用于解引用指针并访问它指向的值。在Rust中,通常更推荐使用引用而不是原始指针。引用提供了更多的安全性和可读性。解引用引用时,不需要使用 *,因为 Rust 自动处理引用的解引用。例如:

fn main() {let x = 42;let ptr = &x;let value = *ptr; // 解引用指针println!("{}", value);
}

在这个示例中,*ptr从指针指向的内存位置检索值42

2.类型注解

在函数签名和类型注解中,*用于表示原始指针类型。例如:

fn process_data(data: *const i32) {// 函数接受一个指向i32的原始指针
}

在这里,*const i32表示对不可变的原始指针类型。

3. 创建原始(raw)指针

在表达式中作为&的右侧使用*,用于从引用创建原始指针。和引用一样,原始指针是不可变或可变的,分别写作 *const T*mut T

fn main() {let x = 42;let ptr: *const i32 = &x; // 从引用创建原始指针let mut y = 42;let ptr1: *mut i32 = &mut y;
}

在Rust中,您不能直接将不可变引用(&)赋值给可变指针(*mut)或将可变引用赋值给不可变指针(*const)。这是因为可变指针允许对数据进行可变修改,而不可变引用要求数据是不可变的,这两者之间存在不兼容性。

请注意,使用可变指针需要放在 unsafe 块内,并且需要格外小心,以确保不会导致不安全性问题。

引用解引用 (&T&mut T)

在Rust中,通常更推荐使用引用而不是原始指针。引用提供了更多的安全性和可读性。解引用引用时,不需要使用 *,因为 Rust 自动处理引用的解引用。

fn main() {let mut x = 42;let reference = &x; // 创建不可变引用// 不需要使用 * 解引用引用println!("Value: {}", reference);let mutable_reference = &mut x; // 创建可变引用// 不需要使用 * 解引用引用*mutable_reference = 100; // 修改值println!("Value: {}", x); // 打印修改后的值
}

4.乘法运算符

在算术表达式中,*用作乘法运算符。例如:

let result = 3 * 4; // 将3和4相乘

在大部分语言中都是作为乘法运算符

5. 通配符导入

在模块声明中,*可用于通配符导入,以从模块中导入所有项目。Java语言中也是可以用于通配符。例如

mod my_module {pub fn function1() {}pub fn function2() {}
}use my_module::*; // 从my_module导入所有项目

在这种情况下,*用于导入所有项目(在这个示例中是函数)从my_module模块中。*的含义取决于它在代码中的上下文,因此在Rust代码中使用时需要注意它的用法。

我是蚂蚁背大象,文章对你有帮助给项目点个❤关注我GitHub:mxsm,文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsm@apache.com

http://www.lryc.cn/news/196967.html

相关文章:

  • 企业该如何选择数字化转型工具?
  • element ui 中 el-button重新渲染后disabled属性失效
  • WebRTC AIMD算法用处
  • 迁移kubelet、docker和containerd工作目录
  • Go 重构:尽量避免使用 else、break 和 continue
  • Unity3D 程序员常用的核心类及方法详解
  • 76.C++ STL list容器
  • 使用FreeMarker导出word文档(支持循环导出实时多张图片)
  • Evaluating Open-Domain Question Answering in the Era of Large Language Models
  • 基于安卓Android的掌上酒店预订APP
  • 搭建CNFS文件系统
  • 网络工程师知识点7
  • C++ 八股文:类析构
  • 第三章 内存管理 八、两级页表
  • 新时代高效记账:自动化智能如何进行财务管理
  • Linux小程序---进度条
  • 【Java笔试强训】Day1(100449-组队竞赛 、OR63 删除公共字符)
  • C语言进行实验:通过程序实现线算图取值【支持VC++ 6.0编辑器环境运行】
  • 信息检索与数据挖掘|(四)索引构建
  • Ruby使用类组织对象
  • Spring Boot 中常用的注解@RequestParam
  • Spark工作流程
  • IDEA如何设置项目包名分级
  • 消防应急疏散指示系统在某生物制药工厂项目的应用
  • C语言文件操作(上)
  • 二叉树的前 中 后序的非递归实现(图文详解)
  • .NET验收
  • C++11——lambda表达式
  • 美国加密货币交易和借贷平台Membrane Labs完成2000万美元融资
  • 8-k8s-污点与容忍