const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);

const在*的右边,则指针的指向不可变。简记为“左定值,右定向”。

(1)指针可以改变,指向的值不能改变

int a=10;
    const int *p1=&a;    //例如:允许 p1+=1 ,不允许 *p1=20
    int const *p2=&a;    //这两句效果一样

(2)指向的值可以改变,指针不可改变

int a=1;

int b=2;

int *const p3=&a;     //例如:允许 *p=3 ,不允许 p3=&b

(3)指针和指向的值都不能改变

int a=10;
    const int * const p4=&a;

int const* const p4=&a;      //这两种写法一样

=====================================更新=====================================

const int *p1 可看作是const修饰的类型是int,修饰的内容是*p1,即*p1不允许改变。

int const *p2 可以看作const修饰的类型是int,修饰的内容是*p2,即*p2不允许改变。

int *const p3 可以看作const修饰的类型是int *,修饰的内容是p3,即p3不允许改变。

const修饰的类型是根据离const最近的类型来决定的。

修饰符*和&应当紧靠变量名,所以应当首先找离修饰符最近的变量名做匹配,而不是const。】

==============================================================================

const只有在修饰的内容里面存在*才参与数据类型。

//?猜测: const修饰的类型里面带的*号可以删去,因此下面的例子中重载类型第一个和第三个可看作是同一种类型。

#include<iostream>
using namespace std;
/*
int fun(int *a,int *b)
{cout<<typeid(a).name()<<"   "<<typeid(b).name()<<endl;cout<<"int fun(int *a,int* b)"<<endl;return 0;
}*/
int fun(const int *a,const int* b)
{cout<<typeid(a).name()<<"   "<<typeid(b).name()<<endl;cout<<"int fun(const int *a,const int* b)"<<endl;return 0;
}
int fun(int *const a,int *const b)
{cout<<typeid(a).name()<<"    "<<typeid(b).name()<<endl;cout<<"int fun(int *const a,int *const b)"<<endl;return 0;
}int main()
{int a = 10;int *p = &a;const int b = 20;const int *p2 = &b;//const只有在修饰的内容里面存在*才参与数据类型//?猜测: const修饰的类型里面带的*号可以删去,因此重载类型第一个和第三个可看作是同一种类型。fun(p,p);fun(p2,p2);return 0;
}

const的修饰规则相关推荐

  1. Linux函数名加数字,C++ 编译器的函数名修饰规则

    函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的 ...

  2. C++函数名的修饰规则

    我们知道在C++中有函数重载这样一个东西,当我们定义了几个功能类似且函数名是一样的函数的时候,只要它的参数列表不同,编译是可以通过的,但是在C中是不可以的. double add(double a, ...

  3. 函数调用约定 and 函数名字修饰规则

    使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就 ...

  4. 成员函数的const究竟修饰的是谁

    demo <pre name="code" class="cpp">class Test { public:const void OpVar(int ...

  5. const与修饰函数形参

    C++中,const与&修饰函数形参的可能情况有四种:C语言中,情况只有1)和3)两种. 1) string str 这是最普通的传值调用,首先对原str进行一次拷贝,会调用拷贝构造函数.st ...

  6. C/C++函数名称修饰规则及extern C的作用(函数名压扎)

    一.函数名称修饰规则 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置 ...

  7. PHP常量修饰符是什么,php const常量修饰符使用方法

    关注细节:使用const定义的常量名称前不需要使用"$"符号,且常量名称通常都是大写的. 试图为const定义的常量赋值,将会出现错误,代码如下: 程序运行结果将会出错,使用con ...

  8. iOS 里const在修饰对象时候的用法

    玩iOS的小伙伴对const应该很不陌生, 在声明全局常量的时候很多时候都会用到, 但是有时候修饰对象很迷惑下面是个人总结, 下面的地址都是模拟的 1. const NSString *str1 = ...

  9. 【C++基础学习】const限定修饰符详解

    C++中const的一个很重要的作用就是把一个对象转换成一个常量.在程序中任何改变这个值的企图会被标记为编译错误.它被称为是"只读的". (1)const对象在定义的时候必须被初始 ...

最新文章

  1. MSSQL优化之 1.1 存储架构之文件和文件组
  2. c mysql批量插入优化_MySQL实现批量插入以优化性能的教程
  3. js中Window跟window的区别
  4. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )
  5. 认知理论与技术(hash函数,SHA,MD
  6. 【开发技术】java中代码检查checkStyle结果分析
  7. 关于win10更新后谷歌浏览器打开卡慢或者无法上网的问题解决
  8. transform再次理解
  9. 2749元!华为nova 5开启预售:7nm工艺麒麟810处理器加持
  10. thinkcmf5调用指定分类的二级_python机器学习API介绍11: 伯努利贝叶斯分类器
  11. [转载] python中 numpy_Python中的Numpy
  12. 关于软件比赛:想当太子,就不要陪别人读书
  13. Docker 快速安装教程
  14. c 调用java map_如何从C中的map迭代器调用类成员函数?
  15. catia v5r18 百度云_CATIA V5 R18全套的教程.pdf
  16. html 动态导航菜单,导航菜单,css3,javascript,响应式菜单,html,css
  17. OA流程 工作流设计
  18. 在IntelliJ下如何做parameterize method的重构
  19. C# Windows Service与Timer(计时器)
  20. uniaccess安全助手卸载

热门文章

  1. 手动同步OCS的通讯簿
  2. PAT 乙级 1016. 部分A+B (15) Java版
  3. LeetCode 769. Max Chunks To Make Sorted
  4. FTP服务器软件 虚拟目录,FTP服务器软件 虚拟目录
  5. python编写dll_python调用c/c++写的dll
  6. perl DBD Informix install and test
  7. Perl程序设计中常用的函数
  8. Java中什么时候使用extends,什么时候使用implements?
  9. BitCoin Gloom系列
  10. 给项目添加spring的测试单元