const指针与指向const的指针

const指针

  • 如下代码:
int main() {int num = 42;int* const p = &num;      // p是常量指针,指向一个整型数cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;num = 76;       // 修改p所指向的内存的值cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

运行结果:

可以看出,num被成功修改,*p发生了改变,即p指向的那段内存空间的值可以改变,const在这里修饰指针p。

  • 如下代码:
int main() {int num = 42;int* const p = &num;      // p是常量指针,指向一个整型数cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;int num2 = 76;p = &num2;       // 此处编译时报错,试图修改p的指向cout << "num = " << num << endl;cout << "num2 = " << num2 << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

编译报错:

报错指出,p的指向无法修改,因为const在这里修饰的是指针本身p

指向const的指针

  • 如下代码:
int main() {const int num = 10086;const int* p = &num;     // p是指向常量的指针cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;*p = 10088;     // 编译报错,试图修改*pcout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

编译报错:

num声明为const,显然不能直接修改,当通过使用指向num的指针p来修改时,也行不通。

  • 如下代码:
int main() {const int num = 10086;const int* p = &num;     // p是指向常量的指针cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;const int num2 = 10010;p = &num2;      // 修改p的指向cout << "num = " << num << endl;cout << "num2 = " << num2 << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

运行结果:

可以看出,p的指向发生了改变,显然这里的const修饰的是p所指向的内容

  • 注意如下代码:
int main() {const int num = 10086;int* p = &num;       // 编译报错cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

编译报错:

const内容无法赋值给普通的指针,只能赋给用const修饰类型的指针

指向const的const指针

  • 如下代码:
int main() {const int num = 100;const int* const p = &num;cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;*p = 99;     // 编译报错,试图修改*p的值cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

编译报错:

  • 如下代码:
int main() {const int num = 100;const int* const p = &num;cout << "num = " << num << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;const int num2 = 99;p = &num2;      // 编译报错,试图修改p的指向cout << "num = " << num << endl;cout << "num2 = " << num2 << endl;cout << "p = " << p << endl;cout << "*p = " << *p << endl << endl;return 0;
}

编译报错:

  • 总结:
    const* 之后时修饰的是指针本身,表示指针指向不可变;
    const* 之前时修饰的是指针所指向的内容,表示这部分值不可变;

const指针与指向const的指针相关推荐

  1. 辨析 const指针 和 指向常量的指针

    辨析以下几种指针p的定义. int tmp = 5;int *p = &tmp; const int *p = &tmp; int const* p = &tmp; int * ...

  2. const指针和指向常量的指针

    先看下面六种写法: 1. const int p;2. const int *p;3. int const* p;4. int * const p;5. const int * const p;6. ...

  3. char * const p; //常量指针,p的值不可以修改  char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p

    char * const p; //常量指针,p的值不可以修改 char const * p://指向常量的指针,指向的常量值不可以改 const char *p: //和char const *p

  4. 函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。

    ①函数指针 函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所 ...

  5. 超详细的const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  6. const指针和指向const的指针

    今天在看项目代码时,发现竟然可以给有const修饰的指针赋值,按道理的话,const修饰的不是常量吗?常量应该是初始化之后就不能再修改才对.对于这个问题,我大致的研究了一下. 参考const 指针与指 ...

  7. const指针与指向const对象的指针

    一. 指向const对象的指针: 定义形式:const double *cptr; const限定了指针指向的对象类型,指针本身不是const类型 特征: 1.不能通过指针改变const对象的值,但是 ...

  8. const指针 与指向const的指针的区别

    const 指针与指向const的指针 当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容.听起来有点混淆一会放个例子上来就明白了. ...

  9. [C++基础]018_常量指针和指向常量的指针

    先来看一下什么是常量指针,什么是指向常量的指针吧! 1. 常量指针定义 1 int * const ptr = new int(); 2. 指向常量的指针 1 const int* ptr; 上面已经 ...

最新文章

  1. 4名矿工控制50%算力 去中心化是不是谎言?
  2. exception in initAndListen: 12596 old lock file, terminating
  3. 解决PLSQL 查询后显示中文为问号(???)问题
  4. RSA的密钥把JAVA格式转换成C#的格式
  5. 【MATLAB教程案例2】GPS信号捕获算法的案例分析
  6. UI组件之TextView及其子类
  7. java框内的值怎么同步_java并发编程使用锁进行数据同步操作一
  8. 字符串中最后一个单词长度
  9. Error Handling in ASP.NET Core
  10. ROS学习笔记5(理解ROS节点)
  11. 设计模式学习笔记——外观模式
  12. Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。
  13. python 实现一个属于自己的语音播报器
  14. win7网上邻居_CentOS7 Linux访问Win7的共享文件夹
  15. 用人话说说文明和文化
  16. 上海图书馆及分馆特色
  17. discuzdiy图片模块_Discuz各类幻灯片的制作方法 - 完全支持DIY
  18. 使用python的turtle库画表情包
  19. 2019牛客国庆集训派对day2 K 2018
  20. 黑苹果引导工具 Clover 配置详解

热门文章

  1. python浅学(1)大体介绍
  2. 1843:【06NOIP提高组】能量项链
  3. 高考加油的c语言程序,高考高三加油口号_高三加油打气的口号大全
  4. jenkins持续集成介绍及安装部署
  5. python获取文本框内容_jquery获取文本框的内容
  6. 计算机网络传输分层模型
  7. C语言:向一个有序数组中插入一个数据,并保持数组的有序性。
  8. 好员工去哪儿了:高端IT白领荒胜过春节保姆荒
  9. 【FPGA——基础篇】同步FIFO与异步FIFO——Verilog实现
  10. 开启xmp1还是2_王者荣耀神秘商店暑假什么时候开启?神秘商店2020年暑假开启时间...