C++复试第二篇:指针、引用、const

目录

  引用+指针

  const限定  

  类型别名


      1. 点运算符"  . "只能用于类型的对象,左侧为一个类对象,右侧为该对象的一个成员名,运算结果为右侧运算对象指定的成员。

        成员函数是定义为类的一部分的函数, = 方法

item.isbn()

         2. std是标准库要用的命名空间,std::cout,要使用定义在命名空间std中的名字cout

           标准库是类型和函数的集合,提供了支持IO操作的类型

        3. 表达式中既有带符号类型又有无符号类型,算式取值为负的时候自动转化为unsigned。

e.g:unsigend u = 10 , u2 = 42 , u - u2 =429496264 

        4. (1) 十进制整型  (2)八进制整

int month = 9, day = 7;
int month = 09, day = 07;

        5. 初始化不是赋值。

                初始化:创建变量时赋予其一个初始值

                 ----- 初始化不能在>>后进行,多个变量不能同时初始化

错误:double salary = wage = 9999.99;

                赋值:把对象的当前值擦除,再用个新的替代

        6. 下列对象的初值是什么?

                任何函数体外的变量都被初始化为0;

                global_str、local_str初值为空字符串;

                global_int为0;local_int未初始化

            std::string global_str;
                    int global_int;
                int main()
                {
                    int local_int;
                    std::string local_str;
                }

  引用+指针

        7. 引用相当于 “ 起别名” ,与被引用的对象绑定,且只能引用对象,不能引用xx的引用

                引用符 " & " 

int &refVal = ival;
/* refVal指向ival */

        8.   (1) 取地址符 “ & ” ,解引用符“ * ” 

              (2) void* 可以存放任意对象的地址

                赋值永远改变的是等号左侧的对象

int i = 42;
int *pi = 0;

pi = &ival;  /pi的值被改变,即地址发生了改变
*pi = 0;  /pi指的元素的值发生了改变

        9.  (1)int*  p; int  *p; 相同

             (2)指针的指针: **表示指向指针的指针

             (3)空指针的初始化:nullptr、0具体的地址

             (4)引用不是对象,所以没有指向引用的指针;但由对指针的引用

int ival = 1024;
int *p = &ival;
int **p2 = &p;

int *pN = nullptr;

  const限定  

     10. const类型的对象可以除了改变其值的所有操作,例如:为others赋值、bool

              const起作用的范围在一个文件之内,想要在所有文件中使用同一个const对象,不想要每个文件都重新生成变量的话,就使用

1号文件
extern const int bufSize = fcn();

2号文件
extern const int bufSize;

        11.

        (1)对常量的引用 = 常量引用,不允许直接赋值(修改值),引用不是个对象

                但是可以简洁修改引用的 非const 对象

int ci = 1024;
const int &r1 = ci;
错!! r1 = 42;

        (2)有一个const值,不能直接用一个普通指针,必须得用指向常量的指针 ≠ 常量指针

const double pi = 3.14;
错! double *ptr = π
对! const double *cptr = π
错! *cptr = 42;

        (3)const 指针 必须初始化,因为不能变

                指针本身是常量,不能变,指向的对象可以变

int errNumb = 0;
常量指针! int *const curErr = &errNumb;  

                是个const就一定要初始化,指针可以不初始化

                认定一个常量表达式,就声明称constexpr类型

错!const int *const p3;

对!指向常量的指针可以不初始化
const int *p;

        (4) 指针和constexpr

        在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关。对象可以是普通对象,也可以是const对象

  类型别名

   11. 定义类型别名的两种方式:

  • typedef:
    typedef char *pstring;
    pstring cstr = 0;

        typedef不能简单地进行替换,e.g:

一个指向char的指针
typedef char *pstring;

cstr是一个指向char的常量指针
const pstring cstr = 0;

≠
指向char常量的指针
const char *cstr = 0;
  • 别名声明:
    using SI = Sales_item;
    SI item;

12. 头文件通常只包含那些只能被定义一次的实体,e.g:类、const、constexpr

       头文件一旦改变,相关源文件有Sales_data.h都需要重新编译以获取更新过的数据

        预处理器:在编译之前执行的一段程序,e.g:#include 

13. 引用从来都是作为所指对象的同义词出现,只有在decltype处是个意外

const int ci = 0, &cj = ci;
|即cj是一个常量引用
|所以z是个引用,必须初始化
|错!
    decltype(cj) z;

14. struct开始,紧跟类名类体,类体之中用" { } "包围形成用一个新的作用域,表示结束的花括号" } "必须写一个分号" ; "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值