ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰

比如:const int a

   int const a

以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用。

因为const和int的顺序先后并不影响结果,因此 int const *   &&  const int *这两中情况就是一样的

所以我们只需要讨论两种情况

------------------------------------------1:int const *ptr

我们说过const int a;就是声明一个int型的常量,而int * ptr;是声明一个int型的指针变量,因此终上所述int const *ptr就是生命一个指向整形常量的指针,我们可以修改指针的值,但是不可以修改*ptr的值,也就是指针所指向的值;

  1. #include<stdio.h>
  2. int main(){
  3. int a=;
  4. int b=;
  5. int const * p1=&a;
  6. //(*p1)=12; 我们可以修改指针的值,但是不能修改他所指向的值
  7. p1=&b;
  8. printf("%d\n",*p1);
  9. b=;
  10. printf("%d\n",*p1);
  11. return ;
  12. }

上面的程序中,p1的值可被修改,可以指向另一个变量的地址,但是(*p1)的值不可以被修改了

首先const  修饰的是整个*pi(注意,我写的是*pi而不是pi)。所以*pi是常量,是不能被赋值的(虽然pi所指的b是变量,不是常量)。 其次,pi前并没有用const 修饰,所以pi是指针变量,能被赋值重新指向另一内存地址的。

------------------------------------------2:int * const ptr

  1. #include<stdio.h>
  2. int main(){
  3. int a=;
  4. int b=;
  5. int * const p1=&a;
  6. printf("%d\n",*p1);
  7. (*p1)=;
  8. //p1=&b; // 我们可以修改他所指向的值,但是不能修改指针的值
  9. printf("%d\n",*p1);
  10.  
  11. return ;
  12. }

我们这里const修饰的p1,p1的值不能改变,但是我们可以改变他所指向的值

p1有了const的修饰,变成了一个指针常量,不能被修改

整个*p1没有被const修饰,所以*p1是变量,而不是常量

-----------------------------》3转换问题

  1. #include<stdio.h>
  2. int main(){
  3.  
  4. const int n=;
  5. int *p;
  6. p=(int *)&n;
  7. printf("%d\n",*p);
  8. *p=;
  9. printf("%d\n",*p);
  10. return ;
  11. }
  1. 情况一:int * pi指针指向const int n常量的情况 
    const int n=10; 
    int *p; 
    p=&n;//这样可以吗?不行,VC下是编译错。const int 类型的n的地址是不能 
             //赋值给指向int 类型地址的指针p的。否则p岂不是能修改n的值了吗! 
    p=(int* ) &n;  // 这样可以吗?强制类型转换可是C所支持的。 
    //VC下编译通过,但是仍不能通过*p=80来修改n的值。去试试吧!看看具体的怎样
  2.  
  3. 情况二:const int * p指针指向const int n的情况 
    const int n=40; 
    const int * p; 
    p=&n;//两个类型相同,可以这样赋值。n的值无论是通过p还是n都不能修改的。 
  4.  
  5. 情况三:用const int * const p申明的指针 
    int n; 
    const int * const p=&n; 
    //你能想象p能够作什么操作吗?p值不能改,也不能通过修改n的值。因为不管是 
    //*p还是p都是const的

int *const && int const * && const int *的区别的更多相关文章

  1. [转] const int *a与int *const a,const int *const a的区别

    http://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在 ...

  2. const int *a与int *const a,const int *const a的区别

    来源:https://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰 ...

  3. C++ char*,const char*,string,int 的相互转换

    C++ char*,const char*,string,int 的相互转换   1. string转const char* string s ="abc";const char* ...

  4. (c++) int 转 string,char*,const char*和string的相互转换

    一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...

  5. error C2556: 'const char &MyString::operator [](int)' : overloaded function differs only by return type from 'char &MyString::operator [](int)'

    char & operator[](int i);const char & operator[](int i);/*const char & operator(int i);* ...

  6. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  7. C# 总结const、 readonly、 static三者区别:

    总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...

  8. C++中加const与不加const的区别

    “常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...

  9. [转] const T、const T*、T *const、const T&、const T*& 的区别

    这里的T指的是一种数据类型,可以是int.long.doule等基本数据类型,也可以是自己类型的类型class.单独的一个const你肯定知道指的是一个常量,但const与其他类型联合起来的众多变化, ...

  10. const T、const T*、T *const、const T&、const T*& 的区别

    原文地址: http://blog.csdn.net/luoweifu/article/details/45600415 这里的T指的是一种数据类型,可以是int.long.doule等基本数据类型, ...

随机推荐

  1. windows查看占用端口的进程

    1方法 先找到进程号: netstat -aon|findstr 再根据进程号得到进程: tasklist |findstr " 2结果

  2. cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)

    CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...

  3. Visual Studio 2012中Visual Assist破解办法

    本工具有两种破解方式 1.破解方式一:Visual_Assist_X_DiE.exe 运行Visual_Assist_X_DiE.exe,勾选安装的VC版本,点击“Patch”按钮即可. 2.破解方式 ...

  4. php构造函数extends

    extends的继续关系 page继承Dapta:也就是page拥有data的所有功能. <?php class Data{ function f(){ "; } } class Pa ...

  5. LaTeX Software & Manuals

    LaTeX Software & Manuals How to Typeset Equations in LaTeX LaTeX is a very powerful tool for typ ...

  6. GPRS/3G

    像GPRS/3G模块之类的应用,需要连接,登陆,初始化等步骤完成后才能传输数据,而这些步骤又比较耗时. 所以用 状态机 + 超时 的机制来实现比较合理. 如下代码片段来描述数据透传 : 状态机 + 超 ...

  7. Python之闭包

    Python之闭包 我们知道,在装饰器中,可以在函数体内创建另外一个函数,例如: def makebold(fn): def wrapped(): return "<b>&quo ...

  8. mysql数据表分表策略(转)

    mysql分表方法: 方法一. 做数据库集群! 主从数据库 双向热备份(或一对多的数据库实时备份策略),这样可将数据库查询分摊到几个服务器去(可跟服务器负载均衡结合起来架构) 优点:扩展性好,没有多个 ...

  9. webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成

    首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...

  10. JS中document对象和window对象有什么区别

    简单来说,document是window的一个对象属性.Window 对象表示浏览器中打开的窗口.如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 windo ...