const int a; int const a; 这两个写法是等同的,表示a是一个int常量。

简记:const后面是什么就限定什么(因为C++标准规定,const关键字放在类型或变量名之前等价的)。比如const int *p就是限定(*p),(*p)就是p指向的那段内存不能变,p的值可以改变;如果是int* const p就是限定p指针的值(p指向的对象)。

 int a=, b=;   //声明变量。
int *p;
p=&a; //声明指针。
*p=;

则const int *p限定(*p),*p不能变,*p=3错误;但是p=&b;可以。

int * const p限定p,p不能变,p=&b错误,但是*p=6;可以。

const修饰指针一共只有三种写法

1. const int *p; 表示p是一个指针,指向const类型的对象(也可以指向非const对象),根本目的在于为了不可以通过p改变p所指对象的值。也可以写成int const* p;含义相同。例如:

 int i=,j=;
const int *pi=&i;//这里就是const指针指向非const对象
i=;//ok i是非const 值可以改变
*pi=;//错误pi是指向const对象的指针不可通过它改变指向对象的值
pi=&j;//ok,p是指向const类型的指针,而本身不是const指针,可以改变指向

2. int * const p; 表示p是一个指针常量,常被叫做const指针。这个const可以理解为修饰指针p,就是说p一旦指向某对象就不可以再改变指向了,因此初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了(其指向对象的值可以更改,但是指向的对象一旦固定,则不能更改)。例如

 int i=,j=;
int * const p=&i;//ok定义时初始化
*p=;//ok,p不是指向const对象的指针
p=&j;//错误,因为p已经指向i了不能更改指向了

3. const int * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量,即:既不能通过p改变指向对象值也不可在p初始化后改变指向。也可以写成int const * const a;含义相同。例如:

 int  n;
const int * const p3 = &n;

则p3本身的值和所指向的值都不能改变了.也就是说,你既不能写 p3 = &n1,也不能写 *p3 = 100了.

实际编程的情况: int * const p的定义很少去用,用的比较多的是 const char * const msg = "Hello";这样的定义, 用于在C++中,代替C中使用宏来定义常量字串的作用.

const char **是一个指向指针的指针,那个指针又指向一个字符串常量。(暂不太理解

char **也是一个指向指针的指针,那个指针又指向一个字符串变量。

对于:int **a;

首先变量a和指针运算符*结合,表明这是一个指针,然后再和第二个*结合表明这个指针指向的是一个指针的地址。因此应将一个指针的地址赋给变量a才是正确的,比如

int b=; int *p=&b; int **a=&p;

再如int *&a;

分析:首先变量a与&运算符结合,表明变量a是一个引用,然后再与*指针运算符结合,表明这个引用引用的是一个指针,因此应将一个指针赋给变量a,比如

int b=; int *p=&b; int *&a=p;

ps,考虑传递形参的时候:

int *p=NULL;

想在change函数中给p分配内存的话,则需要使用指针的指针。如果只使用

 void change1(int *point)
{
point =new int [];
}

当函数change1执行完毕后,外面的p依旧是NULL。

使用下面的函数:

 void change2(int **point)
{
* point =new int [];
}

则调用完change2后,p分配了内存。change2的形参为指向指针的指针。

后面的说的不太清楚吧,自己也没有理解透彻吧,只知道在函数内部分配内存的话,需要指针的指针。

参考网址:

http://blog.163.com/pei_hua100/blog/static/805697592009550281616/

http://bbs.csdn.net/topics/310124559

http://zhidao.baidu.com/link?url=PdmtY2yxY8dFAqMelG2GmpSGbwoU8BGnxygoQXKgbjoe0AlsJkNgiVjeRYu9bBeb6ajDKW3458ssGUAR9Ivly_

http://zhidao.baidu.com/link?url=VKN4RqU7mBeby4EYCqcJUAeD4ki8T1goqhcNLFg7XqD73xKj0XQsbYf8Qh-qwJ6ZFff4YsSyZgqTDxnQleUfxK

(原+转)C++中的const修饰符的更多相关文章

  1. Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

    来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...

  2. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  3. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  4. 转载----C/C++ 中 const 修饰符用法总结

    感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...

  5. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  6. [.net 面向对象编程基础] (8) 基础中的基础——修饰符

    [.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...

  7. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  8. C++函数前和函数后加const修饰符区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

  9. C# 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

随机推荐

  1. Telnet运用and Sqlserver connection failed

    今天的工作中,需要远程访问服务器上的数据库.但是,连接错误,Error code is 1326.说句实话,关于SqlServer 不能远程访问这个问题,我遇到过N次.可是每次都不认真去研究到底是什么 ...

  2. hdu1064Financial Management

    Problem Description Larry graduated this year and finally has a job. He’s making a lot of money, but ...

  3. javascript延迟加载及异步(defer和async)

    一直以来写代码的时候的常用习惯就是吧所有的js文件直接加载在文档的head标签里面,在写js文件的时候有时候获取一些文件对象的时候为空对象,这是由于文档结构还没有加载完,但是js文件已经加载完.也就是 ...

  4. Myeclipse中如何修改Tomcat的端口号

    一,使用 Myeclipse 中自带的 tomcat 右键 configure 弹出窗口 在 port Number 中修改 端口号即可: 二,配置的 tomcat 如果用上述的方法,只能打开这样的窗 ...

  5. 评论PK投票功能的手机版

    ajax投票.点赞.回复,投票后自动转到查看投票结果,投票结果进度条动画显示 地址:http://files.cnblogs.com/files/macliu/hyw_wap.rar 效果图: 首页:

  6. python - list, cllections模块的deque对象

    list.count() list.pop()/list.pop(i) list.insert(i,element) list.sort()和sorted(list) list.reverse()和r ...

  7. Pubwin服务端重装(安装)教程

    此博文已移至爬不稳独立博客:www.pubwin2009.net传送门:http://www.pubwin2009.net/index.php/post/6.html 一,卸载原来服务端和数据库. 1 ...

  8. HDU 1180 诡异的楼梯(BFS)

    诡异的楼梯 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]

    原地址:http://blog.csdn.net/hncqp/article/details/1758337 推荐一些题目,希望对参与ICPC竞赛的同学有所帮助. POJ上一些题目在http://16 ...

  10. USB系列之一:列出你的USB设备

    USB现在已经成为PC机必不可少的接口之一,几乎所有的设备都可以接在USB设备上,USB键盘.鼠标.打印机.摄像头,还有常用的U盘等等,从本篇文章开始,将集中篇幅介绍一下在DOS中使用USB设备的方法 ...