C++编程基础----2.1变量和基本类型

1.基本内置类型

         1.1  算术类型

                        char类型比较特殊,它属于整型,但是对应着整数的ascll码值

                  wchar_t   宽字符    16位,它可以表示确保存放机器最大扩展字符集的任意字符

                  long  long  数据类型是在C++11中新定义的,16位

         1.2 如何选择类型

                       当明确不可能为负数的时候,选用无符号类型

                  使用int执行整数计算

                  执行浮点数运算使用double类型

 

2.类型转换

           定义:将对象从一种给定的类型转换为另一种相关类型

         signed char c = 256;                 //    c的值未定义  ,当我们赋给带符号类型一个超出它范围值时,结果显示未定义的(undefined),无 符号类型的根据编译器不同,结果可能显示不同

          切勿将带符号类型和无符号类型混用

 

3.变量

          何为对象?通常情况下,对象是指一块能存储数据并具有某种类型的内存空间。

        变量(对象)初始化: 初始化不是赋值,初始化是创建变量的时候赋予其一个初始值,而赋值含义是把当前值擦掉,用一个新值来代替

          建议:当你第一次使用变量的时候再定义它

 

4.复合类型

                                  一条声明语句由一个基本数据类型和紧随其后的声明符列表组成   (声明符不仅仅就是变量名,其实还有更复杂的,如&r(引用)、*p(指针))

          4.1  引用

                          int  & refVal2;     //  报错,引用本身不是对象,必须初始化

                          引用本身不是对象,不能定义引用的引用  int  &&r  //  错误

          4.2  指针

                          指针本身是个对象,存放着某个对象的地址,指针类型要与它所指向对象的类型严格匹配

                          &和*字符的多重含义

                          初始化所有的指针   未经初始化的指针在运行时会发生稀奇古怪的错误

                          int *    p1,p2;      //  p1是指向int型的指针,p2是整型变量

                          int  *p;   int  *& r=p;        //  r是对指针p的引用

                          面对一个复杂的指针或引用的声明语句时,从右向左阅读有助于弄清楚它的真实含义

5.const限定符

                5.1   有时候,我们希望定义一种变量,它的值不会发生改变,可以用关键字const对变量类型加以限制

                         const对象一旦创建之后其值就不能再改变,所以const对象必须预先初始化

                         int i=36;       const  int  ci=i;       int  j=ci;                 //  正确   ci是个整型常量,ci常量特征仅仅在执行改变ci特征时才起作用,拷贝一个对象的值并不会改变其自身,一旦拷贝完成,新的对象和原来对象之间没什么关系

                         有的时候,const变量必须在文件间共享,我们需要在file1.cpp中定义并初始化它   extern  const  int  bufsize=20;   file1.h中声明  extern  const  int  bufsize;file2.h中extern  const  int  bufsize声明,那么程序中bufsize是同一个变量,这样就做到了在文件间的共享

              5.2const的引用

                          初始化常量引用时允许用任意表达式作为初始值

                          double dval =3.14;    const  int &ri=dval;          //  正确    有双精度浮点数生成一个临时的整型常量   让ri绑定这个临时常量

                          int  i=42;   int &r1=i;     const  int &r2=i;      r1=0;   //  正确     r2=0;  //  错误  r2是个常量引用

             5.3指针与const

                          const  double  pi=3.14;   double *ptr=π      //  错误,ptr是个普通指针     const  double   *cptr=π    //  正确   常量指针     *cptr=34;     //  错误

                          所谓的常量指针  仅仅要求不能通过该指针改变对象的值,而没有规定这个对象的值不能通过其他途径进行改变

                         

                          int  errNumb=0;   int  *const curErr=&errNumb;  //  curErr一直指向errNumb    

                         const  double  pi=3.14;   const  int  *const  pip=π     //   pip是一个指向常量对象的常量指针

                         int  *const  pi=&i;        //  不能改变pi的值  但可以改变*pi的值

                         const    int  *p2=&i;     //  允许改变p2的值,但是不允许通过*p2修改i的值    p2是个常量指针

6.类型别名

                     类型别名是一个名字,它是某种类型的同义词

                 typedef  char *pstring;

                 const  char  *cstr=0;       const  pstring   cstr=0;       //  这两个定义不一回事     前者是声明了一个指向char的常量指针,后者是声明了一个指向const  char的指针,有const 的地方 首先确定其 修饰的对象,然后就能明白其用意了

7.  预处理器的概述

                      (1)、真正程序运行之前,由编译器调用的独立程序,可以删除备注、包括其他文件及宏的替代。

                 (2)、过去的程序中一个名为NULL的预处理变量,当用到预处理变量的时候,预处理器会自动将它代替为实际值,因此NULL初始化和0初始化指针是一样的。

                (3)、预处理功能还应用的#include中,看到#include标记时就会用头文件的内容去代替#Include

                (4)、C++中还用到一个预处理功能是头文件保护符,头文件保护符依赖于预处理变量,预处理变量有两种状态,已定义和未定义,define指令将名字设定为预处理变量,#ifndef当且仅当变量未定义时为真,#endif为指令结束符,预处理名字最好都写成大写

                           

你可能感兴趣的:(指针,引用,预处理器,const限定符)