C++基础学习-1

123 阅读2分钟

Warning: 自家学习专用__by Arthur

Nouns

  • 变量(或可称为对象):提供一个具名的、可供程序员操作的存储空间;(建议在使用的时候再去定义,确保作用域的正确性)。定义方式:数据类型 + 声明符
  • 复合类型(compound type):基于其他类型定义的类型,如数组、指针、引用、结构体;
  • 静态类型语言(如C++):在编译阶段检查类型。类型决定能够进行的操作,编译器检查数据类型是否支持要执行的运算;
  • 分离式编译:允许把程序拆分成多个逻辑部分编写,该机制将程序分割成若干个文件,每个文件可被独立编译,这就涉及到“声明”与“定义”的概念;
  • 引用(reference):间接访问,为对象起了两外一个名字,引用类型引用了(refers to)另外一种类型。通常我们所说的“引用”指左值引用(lvalue reference)。
        int val = 110;          //声明并初始化
        int& refVal = val;      //引用,refVal指向val,即为val的别名,这一动作必须在定义引用的同时进行,绑定(bind),无法再次绑定
  • 指针(pointer):间接访问,是指向另一种类型的符合类型,是对象,可赋值,存储的是被指向对象的地址;
        int val = 120;              //声明并初始化
        int* valPtr = &val;         //指针指向变量val,即将val的地址存在了指针变量valPtr中
        cout << *valPtr << endl;    //解引用操作“*”,输出120,与定义指针符号“*”的作用不同
  • 空指针(null poiter),不指向任何对象,生成方式:
        int* ptr1 = nullptr;
        int* ptr2 = 0;
        int* ptr3 = NULL;         //#include <cstdlib>
  • 指向指针的引用:引用非对象,不可被引用,但是指针是对象,可被引用,如
        int val = 119;
        int* ptr;
        int* &refPtr = ptr;         //引用定义:int* 表示被引用的对象还是int指针,&为定义引用的符号
        refptr = &ptr;              // 传入地址, 实际上是ptr获取了此地址  
        *refptr = 0;                //解引用,将val赋新值0
                                    //整个过程中,虽然都是在对refPtr操作,但是其仅为实际对象的“*影子*”,仍是目标仍是实际对象

Notation

  • 初始化不是赋值,在定义一个变量时并给其一个初始值,此为初始化;而在程序其他地方对其值抹去并赋予新值,此为赋值。
  • 引用只是被绑定对象的影子,不是对象(区别于指针,指针是对象),所有对引用进行的操作都是对本身实体进行的。
  • 指针的状态有如下几种,一般可作为条件表达式、判断条件
    • 指向一个对象,true
    • 指向紧邻对象所占空间的下一个位置, true
    • 空指针,即指针没有指向任何对象, false
    • 无效指针(编译器不检查此错误,在运行时会报错)