1:同其他数据类型一样,指针也有常量,使用const关键字定义,形式如下:

int i=9;

int *const p=&i;//无法改变内存指向

*p=3;

将关键字const放在标识符前,表示这个数据本身是常量,而数据类型那个int*即整形指针。与其他常量一样,指针常量必须初始化。我们无法改变它的内存指向,但是可以改变它指向内存的内容。

若将const以如下形式使用时:

int i=9;

const int *p=&i;//不允许通过指针修改内容

这是指向常量的指针,虽然它所指向的数据可以通过赋值语句进行修改,但是通过该指针修改内存内容的操作是不允许的。

当const以如下形式使用时:

int i=9;

const int *const p=&i;

该指针是一个指向常量的指针常量,既不可以改变它的内存指向,也不可以通过它修改指向内容的内容。

2:运行代码:

// 5.6.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl; int main()
{
int i = ;
const int c = ; //c为常量
const int* pR = &i;//这个指针只能用来“读”内存数据,但可以改变自己的地址。
int* const pC = &i;//这个指针本身是常量,不能改变指向,但它能够改变内存的内容。
const int* const pCR = &i;//这个指针只能用来“读”内存数据,并且不能改变指向。
cout<<"三个指针都指向了同一个变量i,同一块内存"<<endl;
cout<<"指向常量的指针pR操作:"<<endl;
//*pR = 6 //去掉语句前方注释报错
cout<<"通过赋值语句修改i:"<<endl;
i = ;
cout<<"i:"<<i<<endl;
cout<<"将pR的地址变成常量c的地址:"<<endl;
pR = &c;
cout<<"*pR:"<<*pR<<endl;
cout<<"指向常量的指针pC操作:"<<endl;
//pC = &c; //去掉语句前方注释报错
cout<<"通过pC改变i值:"<<endl;
*pC = ;
cout<<"i:"<<i<<endl;
cout<<"指向常量的指针常量pCR操作:"<<endl;
//pCR =&c;
//*pCR =100;
cout<<"通过pCR无法改变任何东西,真正作到了只读"<<endl;
return ;
}

运行结果:

C++入门经典-例5.6-指针与const的更多相关文章

  1. C++入门经典-例7.6-this指针,同一个类的不同对象数据

    1:对于类的非静态成员,每个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的.那么调用共享的成员函数如何找到自己的数据成员呢?答案是通过类中隐藏的this指针. 2 ...

  2. C++入门经典-例7.5-对象的指针,函数指针调用类成员

    1:指向相应对象的指针就是对象的指针,它的生明方法与其他类型一样,如下: 类名 *p; 类的指针可以调用它所指向对象的成员.形式如下: p->类成员; 2:代码如下: (1)cat.h #inc ...

  3. C++入门经典-例6.14-通过指针连接两个字符数组

    1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...

  4. C++入门经典-例6.9-通过指针变量获取数组中的元素

    1:通过指针引用数组,需要先声明一个数组,再声明一个指针. int a[10]; int *p; 然后通过&运算符获取数组中元素的地址,再将地址值赋给指针变量. p=&a[0]; 代码 ...

  5. C++入门经典-例5.9-使用空类型指针执行函数

    1:运行代码: // 5.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  6. C++入门经典-例5.8-使用指针函数进行运算

    1:函数指针式指向函数内存的指针,一个函数在编译时被分配给一个入口地址,这个函数的入口地址就称为函数指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数. 一个函数可以返回一个整数型值.字符 ...

  7. C++入门经典-例5.7-调用自定义函数交换两变量值,传入指针

    1:代码如下: // 5.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  8. C++入门经典-例5.5-空类型指针的使用

    1:代码如下: // 5.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  9. C++入门经典-例5.3例5.4-输出int指针运算后的地址值

    1:代码如下: // 5.3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

随机推荐

  1. Python应用RabbitMQ教程

    介绍 RabbitMQ是一个消息代理.它的工作就是接收和转发消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ就扮演着邮箱.邮局以及邮 ...

  2. Chrome开发者工具详解(一)之使用断点来调试代码上

    1.断点调试是啥?难不难? 断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了.操作起来似乎很简单,其实很多人纠结的是,是在哪里打断 ...

  3. golang time json mongodb 时间处理

    golang 中解决前端time 输出,后端mongodb中时间存储. package mask import ( "fmt" "time" "go. ...

  4. 个人总结的J2EE目前知道的涵盖面,从大方向入手,多写单元测试,加强基础

    JEE Development process: java SE 普通语法,,异常处理,数据结构,循环,面向对象,泛型, 属性,反射,多线程,线程池,锁, lambada,异步编程,并发 框架spri ...

  5. Efficient Estimation of Word Representations in Vector Space (2013)论文要点

    论文链接:https://arxiv.org/pdf/1301.3781.pdf 参考: A Neural Probabilistic Language Model (2003)论文要点  https ...

  6. idea运行web项目乱码

    windows下idea中web项目乱码,主要原因是服务器端乱码(执行webservlet的时候,编码格式改变),导致客户端的编码格式与webservlet传递过的编码格式不一致. 前端网页的编码,通 ...

  7. 7.Go-用户信息和系统文件目录

    7.1.获取操作系统用户信息 (1)os包及子包功能 os/exec包,负责执行外部命令 os/singal对输入信息的访问 os/user通过名次或ID 查询用户账号 (2)在os/user中提供了 ...

  8. IT项目开发流程

    项目开发流程: 一.需求分析:相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步 ...

  9. Test测试方法

    Junit 注解 解释 @Before 在每个测试方法运行前执行的方法 @After 在每个测试方法运行后执行的方法 @BeforeClass 在类中所有测试运行之前运行的方法 @AfterClass ...

  10. Spring 静态代理和动态代理

    现在我们来模拟一下,某位学生去考试. 假设他(小明)正常的考试. 运行结果:        结果: 突然某一天,他睡过头了,来不急去考试,所有他打算叫另一个人(Cheater)去代替他考试. 运行结果 ...