zoukankan      html  css  js  c++  java
  • rust学习笔记(二)变量和类型

    变量声明 let v1 :i32 = 10; rust官方说这有诸多优点,其实是方便编译器开发程序员。。

    let 定义常量。可变常量需要加上mut。

    let可以对变量重复定义成任意类型

    let x = 1
    
    let x = true
    

    前面的语句为啥没有定义类型,这个功能就像c++的auto一样,自动推导了类型。

    显示的定义别名

        type tInt = u32;
        let x2 :tInt = 20;
    

    静态变量

      静态变量它的声明周期为整个程序运行期间

    定义需要注意

    1. 必须马上初始化
    2. 初始化时必须编译器认为返回常量
    3. 允许加上mut但是必须使用unsafe

    static AAA:i32 = 0; println!("{:?}", AAA); static mut AAA2 :i32 = 1; unsafe{ AAA2 = 21; println!("{:?}", AAA2); }

      

    const定义常量: const G2 :i32 =0;

     常用的数据类型和别的语言没啥大的差别

    bool

    char 不是1个字节是4个字节。需要使用1个字节可以使用u8数组

    i8 u8 i16 u16 i32 u32 i64 u64 i128 u128 isize usize

    整数溢出,rust提出了解决方案

    • checked_* 返回None
    • saturating_* 返回最大值
    • wrapping_* 返回溢出的截断

    f32 f64

    浮点数可能返回特别的值需要注意了啊

    enum FpCategory{

      Nan, 空

      Infinite, 无限大

      Zero,0

      Subnormal, 小数位超出位数收敛的情况

      Normal 正常

    }

    指针类型和智能指针这些以后再说

    Box<T> 有所有权,无权释放内存

    &T 无权释放内存,无权写

    & mut T 无权释放内存,有权写

    *const T 只读指针,无权写

    *mut T有权写

    Rec<T>共享所有权,线程不安全

    Act<T>原子型引用指针,共享所有权,线程安全

    Cow<a,T> 写时复制

    类型转换不支持隐式的转换,这种新语言有优势,使用as,后续一般使用标准库转换。

    复合类型

     tuple元组

       	let tup1 = (2131i32, "abc");
       	println!("{} {}", tup1.0, tup1.1);
    

     有点奇妙的是允许定义空元组   let ept:() = () 占用内存空间为0

    struct 结构

    1        struct Poinit{
    2            x :i32,
    3            y :i32,
    4        }
    5        let p = Poinit{x:1, y:2};

    也有空结构  struct AA; struct AA2(); struct{};

    type struct结构,没有名字的结构体

    struct AA(i32,i32)

    struct Age(i32);
    let age2 = Age(1);
    println!("{:?}", age2.0);

    enum 主要用在匹配模式match一起使用

    类型递归定义,不能包含自身。

    类似c

    type struct Node{
        void *data;
         struct Node *next;  
    }
    
    
    struct Rex{
        data:i32,
        next:Box<Rex>,  
    }
  • 相关阅读:
    PAT:1006(换个格式输出整数想&#183;)
    PAT 1008(数组循环右移问题)
    kaliLinux 工具dmitry参数解析
    PAT 1004(成绩排名)(C++)
    PAT乙级:我要通过(1003)
    PAT乙级:写出这个数(1002)
    PAT乙级:(3n+1)猜想 (1001)
    Linux初体验
    C语言基础入门:起源
    Linux_ pipe 匿名管道 浅解
  • 原文地址:https://www.cnblogs.com/beckbi/p/11516557.html
Copyright © 2011-2022 走看看