常量指针

常量指针是指向常量的指针,指针指向的内存地址的内容是不可修改的。

常量指针定义“const int *p=&a;”告诉编译器,*p是常量,不能将*p作为左值进行操作。但这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许修改的,例如:

int a=0,b=1;
const int *p;  //声明常量指针p
p=&a;            //p指向a
p=&b;            //修改指针p让其指向b,允许
*p=2;            //不允许

指针常量

指针常量是指针的常量,它是不可改变地址的指针,但可以对它所指向的内容进行修改。

指针常量定义"int *const p=&a;"告诉编译器,p是常量,不能作为左值进行操作,但允许修改其指向的内容,即*p是可修改的。指针常量必须在声明的同时对其初始化,不允许先声明一个指针常量随后再对其赋值,这和声明一般的常量是一样的,例如:

int a=0,b=1;
int *const p1=&a;
int *const p2;       //不允许,必须对其初始化
p2=&b;                 //不允许,p2是常量不允许作为左值
*p1=2;                 //允许修改指针*p1的值

如果指针作为函数参数,当我们不想被调用函数随意修改参数指针而只是想修改参数指针指向的内容时,我们常把指针常量作为参数。例如:

有两个整形变量a,b,我们写个函数用于交换a,b的值,利用指针作为形参,函数修改参数指针的值是我们不希望的,这时可将参数设为指针常量,如果函数对指针修改编译是将报错。

void Exchange(int *const a,int *const b)
{
int temp;
temp=*a;
*a=*b;
*b=temp
}

事实上,如果函数不修改参数本身的值,我们一般对参数加上const限定,这也是提高代码质量的一个小技巧,在类的方法中,如果方法不修改类属性的值,我们也常将方法加上const。

C/C++中的常量指针与指针常量相关推荐

  1. C++中常量指针,指针常量(const 和*)的使用方法和理解方法

    为什么80%的码农都做不了架构师?>>>    当const和指针一起使用的时候,会出现很多复杂的情况,这些复杂的情况大概可以归纳为3种情况: (1),指向常量的指针. (2),常指 ...

  2. c语言指针常量和常量指针,详解C语言中的常量指针和指针常量

    概述对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区 ...

  3. 【错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 中的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )

    文章目录 一.报错记录 二.修改方案 一.报错记录 执行下面的代码 , 报错如下 : 执行的错误代码 : #include <stdio.h> #include <stdlib.h& ...

  4. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  5. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  6. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

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

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

  8. 【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一.字符串 一级指针 内存模型 1.指定大小字符数组 2.未指定大小字符数组 3.指向常量字符串的指针 4.指向堆内存的指针 一.字符串 一级指针 内存模型 #include <std ...

  9. C++ 指向常量的指针与指针类型的常量

    (1)声明指向常量的指针时,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象. #include<iostream>using namespace std;int m ...

最新文章

  1. SAP S4HANA TR传输之操作
  2. 在Linux上取得Windows上的文件
  3. JSP快速入门教程——全十讲
  4. 比较TFS与SVN,你必须知道的10点区别
  5. 2020计算机网络基础与应用,2020年国防科技大学硕士研究生考试F1107计算机网络基础考试大纲...
  6. jpa mysql存储过程_spring data jpa 如何调用mysql存储过程?
  7. 4.openSession() 、 getCurrentSession()与session上下文
  8. 高等代数中的名词解析-No1
  9. 编译cubieboard android 源码过程详解之(六):pack
  10. C语言之程序中内存的来源:栈 堆 数据段
  11. img打 webpack_webpack 打包js中的img路径问题
  12. UI设计素材|底部导航设计的黄金法则
  13. SpringBoot项目的mybatis逆向工程
  14. 将ant Design本地化,可通过link以及script直接引入html中使用
  15. C# List最大值最小值问题 List排序问题 List Max/Min
  16. 小数保留4位_实验结果保留几位有效数字?
  17. 高斯过程回归matlab,高斯过程回归及其应用.PDF
  18. DRAM Failures(漏电流与寄生电容)
  19. 126邮件POP3,SMTP服务器与端口设置
  20. javascript汉字转拼音 [zt]

热门文章

  1. 1062 最简分数(PAT乙级 C++)
  2. [渝粤教育] 平顶山学院 传播理论与技巧 参考 资料
  3. 【渝粤教育】国家开放大学2018年春季 8634-22TAndroid智能手机编程 参考试题
  4. 【渝粤教育】国家开放大学2018年秋季 0734-22T出纳实务 参考试题
  5. 【渝粤题库】国家开放大学2021春2247社会工作政策法规题目
  6. 布局 线宽 间距 走线 泪滴 过孔 【快速提升PCB板Layout质量的6个细节】
  7. asp 取数据 计算_ASP.NET Core 简介
  8. Loadruner压数据库oracle,LoadRunner连接Oracle数据库(转)
  9. Java线程的调度及线程的优先级
  10. module ‘tensorflow_core.compat.v1‘ has no attribute ‘contrib‘问题的完美解决