1.引用:

  为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名)。

  PS:1.通过图片中编译所提示的报错信息也可知,引用必须被初始化;

    2.引用并非对象,相反的,它只是为一个已经存在的对象所起的另一个名字而已;

2.指针:

  与引用类似,指针也实现了对其他对象的间接访问,不过,指针本身就是一个对象,允许对指针赋值与拷贝,而且在其生命周期内可以先后指向几个不同的对象(引用只能指向一个初始化的)。

  指针无须再定义时赋初值,与其他内置类型一样,在块作用域内定义的指针如果没有被初始化,它也将拥有一个不确定的值。

PS:指针存放某个对象的地址,指针的值就是地址;

     int *p1,*p2;//p1和p2都是指向int型对象的指针;
double p3,*p4;//p4是指向double型对象的指针,p3是double型对象;
int i = ;
int *p1 = &i;//p1存放变量i的地址,或p1指向i;
*p1 = ;//正确,由*得到指针所指的对象,即可经由p为变量i赋值;
p2 = &i;//正确,同是int*类型 ;
*p2 = &i;//错误,类型之间不能转换,&i是int*类型,*p2是int类型;
p4 = ;//正确,因为0没有数据类型;

3.const限定符:

  const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

其主要作用有:

  (1)可以定义const常量,具有不可变性。 
  例如:const int Max=100; Max++会产生错误; 
  (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
  例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; 
  (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
  如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可! 
  (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 
  例如: void f(const int i) { i=10;//error! } 
  (5) 可以节省空间,避免不必要的内存分配。 例如: 
  #define PI 3.14159 //常量宏 
  const double Pi=3.14159; //此时并未将Pi放入RAM中 ...... 
  double i=Pi; //此时为Pi分配内存,以后不再分配! 
  double I=PI; //编译期间进行宏替换,分配内存 
  double j=Pi; //没有内存分配 
  double J=PI; //再进行宏替换,又一次分配内存! 
  const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。 
  (6) 提高了效率。 
  编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

PS:const限定的对象规则(左数右指:const和*的位置),也可叫顶层const和底层const。

  下面分别用const限定不可变的内容是什么?
  1)const在前面
  const int nValue; //nValue是const
  const char *pContent; //*pContent是const, pContent可变
  const char* const pContent; //pContent和*pContent都是const

C++ Primer 第二章 引用 指针 const限定符的更多相关文章

  1. (1)指针、引用、const限定符

    自己看书时的一些理解,可能有错误的地方.随着指针的使用增多,会不断修改这篇文章的内容,过去错误的会用划线划去后保留. 1.对引用.指针.常量引用.指向常量的指针.常量指针的理解 //对引用.指针.常量 ...

  2. Spline样条函数 //C++关键字:operator // 重载函数 // 隐含的this指针 // 指针和const限定符

    在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义.样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的差值误差,这样就避免了使用高阶多项式 ...

  3. C++PRIMER第二章前半部分答案

    C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...

  4. C++ Primer 笔记——const 限定符

    1.因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化. 2.默认情况下const对象只在文件内有效,如果想在多个文件之间共享const对象,必须在变量的定义之前添加exter ...

  5. const限定符、constexpr和常量表达式------c++ primer

    编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这 ...

  6. Chapter03 第二节 const限定符的使用

    3.2 const限定符 const的作用:替代#define作为有类型检查的常量来使用.他的值被初始化后就固定了,成为一个只读变量,不能更改.(推荐使用特殊的命名规范来区分常量和非常量). cons ...

  7. C++杂谈(一)const限定符与const指针

    const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...

  8. 指针和Const限定符

    指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...

  9. 【C】——指针与const限定符

    const限定符和指针结合起来常见的情况有以下几种. const int *a; int const *a; 这两种写法是一样的,a是一个指向const int型的指针,a所指向的内存单元不可改写,所 ...

随机推荐

  1. 基于@AspectJ和schema的aop(四)---@AspectJ进阶

    @AspectJ可以使用切点函数定义切点, 我们还可以使用逻辑运算对切点进行复合运算得到复合的切点. 我们还可以对切点进行命名, 从而可以复用切点.当一个连接点匹配多个切点时, 需要考虑增强织入的顺序 ...

  2. hibernate的dao中参数的传递取值

    hibernate的dao中参数的传递取值 private Query setParameter(Query query, Map<String, Object> map) { if (m ...

  3. Apache+Tomcat+mod_jk负载均衡

    一.需要的软件 1.jdk1.5以上 2.Tomcat6以上 3.Apache2.2以上 ,地址http://apache.dataguru.cn//httpd/binaries/win32/ ,名称 ...

  4. Linux Source命令及脚本的执行方式解析

    转 http://www.51testing.com/html/38/225738-206878.html 当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用sou ...

  5. 三HttpServletResponse对象介绍(1)

    转载自http://www.cnblogs.com/xdp-gacl/p/3789624.html Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象 ...

  6. jQuerySchool

    jQUery

  7. Cheatsheet: 2013 10.01 ~ 10.08

    Other 20 Tips for becoming a better programmer Top 10 Movies for Programmers .NET RaptorDB - The Key ...

  8. ___security_cookie机制,防止栈溢出

    从研究底层和汇编以来,已经多次接触到“栈溢出”这个名词了. 这次在汇编码中看到了个不明就里的 ___security_cookie ,查了下,原来是编译器的安全检查机制.转载一篇文章: 首先,secu ...

  9. Practical Java

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. ubuntu下卸载vmware

    直接crl+alt+t打开一个terminal,然后输入sudo vmware-installer --uninstall-product vmware-workstation即可卸载!操作如下图: ...