C++入门经典-例5.6-指针与const
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的更多相关文章
- C++入门经典-例7.6-this指针,同一个类的不同对象数据
1:对于类的非静态成员,每个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的.那么调用共享的成员函数如何找到自己的数据成员呢?答案是通过类中隐藏的this指针. 2 ...
- C++入门经典-例7.5-对象的指针,函数指针调用类成员
1:指向相应对象的指针就是对象的指针,它的生明方法与其他类型一样,如下: 类名 *p; 类的指针可以调用它所指向对象的成员.形式如下: p->类成员; 2:代码如下: (1)cat.h #inc ...
- C++入门经典-例6.14-通过指针连接两个字符数组
1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...
- C++入门经典-例6.9-通过指针变量获取数组中的元素
1:通过指针引用数组,需要先声明一个数组,再声明一个指针. int a[10]; int *p; 然后通过&运算符获取数组中元素的地址,再将地址值赋给指针变量. p=&a[0]; 代码 ...
- C++入门经典-例5.9-使用空类型指针执行函数
1:运行代码: // 5.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例5.8-使用指针函数进行运算
1:函数指针式指向函数内存的指针,一个函数在编译时被分配给一个入口地址,这个函数的入口地址就称为函数指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数. 一个函数可以返回一个整数型值.字符 ...
- C++入门经典-例5.7-调用自定义函数交换两变量值,传入指针
1:代码如下: // 5.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例5.5-空类型指针的使用
1:代码如下: // 5.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例5.3例5.4-输出int指针运算后的地址值
1:代码如下: // 5.3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
随机推荐
- 最短路(hdu2544)
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助 ...
- WPF最小化窗体后激活函数显示不了窗体
WPF最小化窗体后激活函数显示不了窗体 今天测试小哥给我提了一些问题,其中一个问题是这样的,点击web端的一个链接,是能启动本地的一个应用程序的,如果本地应用程序已启动(通过tcp进程间通信),那么应 ...
- Java 获取日期间的日期 & 根据日期获取星期
场景:根据起止日期获取中间的日期: 根据日期获取当前日期的星期 根据日期日期获取日期 /** * 获取日期间日期 * @param start * @param end * @return */ pr ...
- String,到底创建了多少个对象?
String str=new String("aaa"); <span style="font-size:14px;">String str=n ...
- dedecms织梦副栏目名称和链接调用
https://blog.csdn.net/qq_41805834/article/details/79552859
- HDU - 6704 K-th occurrence (后缀数组+主席树/后缀自动机+线段树合并+倍增)
题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点. 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点, ...
- 前端面试题-display:none和visibility:hidden的区别
一.display:none和visibility:hidden的区别 1.1 空间占据 1.2 回流和渲染 1.3 株连性 二.空间占据 display:none 隐藏后的元素不占据任何空间,而 v ...
- @AutoConfigureBefore
@AutoConfigureBefore(Xxx.class)此注解用在类名上,标识在加载Xxx类前加载该配置类
- Vue+NodeJS+ElementUI 的简单示例
演示所使用到的工具:谷歌浏览器.HBuilder.cmd命令窗口.nodejs(自带npm). 1.先使用 vue create 命令创建一个项目,等待创建完成. 2.切换到项目中. 3.使用 vue ...
- vue cli3 项目配置
[转]https://juejin.im/post/5c63afd56fb9a049b41cf5f4 基于vue-cli3.0快速构建vue项目 本章详细介绍使用vue-cli3.0来搭建项目. 本章 ...