第二章

1、类型转换:

  • 非布尔值转换为布尔值,初始值为零,则为FALSE;否则为true。

  • 布尔值付给非布尔值时,false则结果为0,true则结果为1。

  • 浮点数赋给整数,取小数点之前的部分。

  • 整数赋给浮点数,小数部分记为零,也有可能超出浮点数的容量,损失精度。

  • 赋给无符号类型一个超出其范围的值时,结果是对无符号类型表示数值的取模后的余数。          p33

  •  

2、c++定义了初始化几种不同的形式,例如:

      int i=0;

int i={0};

int i{0};                            

int i(0);                        p39

 

3、标识符:

标识符由字母、数字、下划线组成,只能以字母或下划线开头。

标识符不能出现两个连续的下划线,也不能以下划线紧邻大写字母开头。

函数体外不能以下划线开头。                                                                p42

 

4、复合类型:                                                        p45

  1. 引用:引用必须完成初始化,且只能绑定在对象上,不能与字面值绑定在一起。

如错误的引用形式:  int &refval =10; 

引用本身不是一个对象,它始终绑定在初始的对象上面。

 

  2.指针

            int *p1=nullptr;

            int *p1=0;

             int *p3=NULL;

           在新标准下,现在的c++程序最好使用 nullptr,避免使用NULL。

  • 建议在定义对象后再定义指向他的指针,如果不清楚指针指向何处,那么最好将其初始化为一个空指针。

      3.void* 指针

        void 类型的指针可以存放任意类型的地址,但不能对其所指的对象进行操作,因为无从得知其所指对象的类型。  p50

 

5、我们需要分清数据类型 与 修饰符之间的区别:

如:int* p, i, &m=i;

int 是数据类型,而像*,&是修饰符,它们仅仅修饰了紧跟其后的变量而对整条语句不起作用。  p53

 

6、const限定符                                                          p56

1、const的引用:

      const int ci =1024;    

      const int &ri=ci;      //正确

      ri=42;                      //错误

      int &r2 = ci;            //错误   非常量引用常量

 

我们对引用绑定的不同情况进行测试

int main()
{
    int i=42;
    const int &r1 = i;
    const int &r2 = 42;
    const int &r3 = r1*3;
    cout<<"r1= "<<r1<<endl;
    cout<<"r2= "<<r2<<endl;
    cout<<"r3= "<<r3<<endl;

    /*以下改变i的值以观察常量应用的变化*/
    cout<<"以下改变i的值以观察常量应用的变化  i=0\n"<<endl;
    i=0;
    cout<<"r1= "<<r1<<endl;
    cout<<"r2= "<<r2<<endl;
    cout<<"r3= "<<r3<<endl;


    return 0;
}

结果为

结论:对于常量引用 r1 它实际上绑定在了 i 这个对象上,即与它相同类型的非常量 ;而对于 r2 , r3 都被绑定在生成的临时量  temp 上,因此 i 的值的变化不能改变 r2 ,r3 的值。

对于普通的非常量引用有诸多的限制,实际上它只能被绑定在与它类型一致的对象上。

int  i=40;

const int c1=32; 

int &r1=42;                   //错误

int &r2=i*6;                //错误

int &r3=c1;                   //错误

 int &r4=i;                     //正确

 

 

6、指向常量的指针                        p56

  • 存放常量的地址只能使用指向常量的指针。

const double pi=3.14;               //定义一个常量

double *ptr = &pi;                    //错误:ptr是一个普通指针

const double *cptr=&pi;          //正确

 *ptr = 42;                                //错误不能改变常量的值

  • 指向常量的指针能指向一个非常量

double dval = 3.14;

cptr = &dval;

  • 我们都不能通过指向常量的指针改变指向对象的值。

 

7、常指针 

定义:int i=0;

int *const p = &i;

如果所指的对象是非常量,我们可以通过常指针改变对象的值,但不能改变指针的值。p57

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值