前两天在网上看到华为的一些笔试题,对基础的掌握仍然是这种大公司所重视的。其间对指针掌握的要求比较多,有一道是关于const指针的。看到那道题,回来整理了一些有关const指针的内容,分享一下。

  const说明指针变量,组合的情况可能会显得很复杂。使用指针时要涉及两个目标,即指针本身和指针所指的对象。关于const指针变量,可归结为以下三种:
  1.指向常量的指针变量;
  2.常指针变量;
  3.指向常量的常指针变量。
  下面来分别谈谈这三种情况。

一、指向常量的指针变量:
声明格式: const type * var_name;
或 type const * var_name;
特点: 可改值。
  将指针声明冠以const,使指向的对象为常量,而不是指针为常量。注意:指向常量的指针不一定指向真正的常量,它也可以指向常量,只是从该指针的角度来看,它所指向的对象是常量,通过该指针不能修改它指向的对象。它还可以指向其它的对象,可以不初始化。
-----eg:
int a = 0,b = 1;
const int c = 3;
const int* pi; //等同于 (const int*) pi;
pi = &a;
*pi = 10; //错误:不能修改它指向的对象。
a = 10;
pi = &b;
*pi = &b;
*pi = 20; //错误:不能修改它指向的对象。
b = 20;
pi = &c;
*pi = &c;
*pi = 30; //错误:不能修改它指向的对象。
-----eg2:
const char* pc = "asdf";
pc[3] = 'a'; //错误:不能修改它指向的对象。
pc = "ghik";
-----eg3:
const char* step[3] =
{"left","right","hop"};
step[2] = "skip";
step[2][1] = 'i'; //错误:不能修改它指向的对象。

二、常指针常量:
声明格式: type* const var_name;
特点: 可改对象。
  要把指针本身,而不是它指向的对象声明为常量,采用运算符 *const,必须初始化,通过该指针可以修改它指向的对象,但它不可以指向其他的对象。
-----eg:
int a = 0,b = 1;
int* const pi = &a; //等于 int* (const pi) = &a;
*pi = 10;
pi = &b; //错误:pi本身为常量,不能指向其他对象。

三、指向常量的常指针变量:
声明格式: const type * const var_name;
特点: 值与对象均不能改。
  要使两个目标都是常量,两者都要声明为 const 。
eg:
int a = 0,b = 1;
const int c = 3;
const int* const pi = &a; //相当于: (const int*)(const pi) = &a;
*pi = 10; //错误:不能修改它的对象。
a = 10;
pi = &b; //错误:不能指向其它对象。
eg2:
const char* const pc = "asdf";
pc[3] = 'a'; //错误:不能修改它的对象。
pc = "ghik"; //错误:不能指向其它对象。
eg3:
const char* const step[3] =
{"left","right","hop"};
step[2] = "skip"; //错误:不能指向其它对象。
step[2][1] = 'i'; //错误:不能修改它的对象。

  一般的,当声明中出现 const 描述符时,它修饰的是紧跟其后的声明元素或者在 const 成员函数声明中函数的 this 指针。
  注意:可以将变量的地址赋给指向常量的指针变量,不会因此有什么害处,但是,常量的地址不能赋给无约束的指针。
eg:
int a = 1;
const int c = 2;
const int* p1 = &c;
const int* p2 = &a;
int* p3 = &c; //非法!
int* const p4 = &c; //非法! 指针常量 p4 能够改值。
const int* const p5 = &c;

const指针的一些总结相关推荐

  1. C++ Const指针学习

    Const指针 const指针顾名思义就是常量指针的意思.下面将通过一些具体例子说明const指针的几种用法. const type *p 特性 防止使用p指针来修改p所指向的值,下面是最简单的错误例 ...

  2. c++中的void指针和const指针

    在c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针. 1.void指 ...

  3. const指针 常指针

    (2)常指针 必须进行初始化,且const指针的值不能修改. #include<iostream> using namespace std; int main(){const int nu ...

  4. boost::core模块实现分配const指针

    boost::core模块实现分配const指针 实现功能 C++实现代码 实现功能 boost::core模块实现分配const指针 C++实现代码 #include <boost/core/ ...

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

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

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

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

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

    1.指向const对象的指针 C++强制要求指向const对象的指针也必须具有const特性. const double *ptr; 限定了ptr指针指向double类型const对象的, 即cons ...

  8. C++之指针探究(十九):typedef和const指针

    typedef和const指针   typedef int* pointer; const pointer p1; 相当于是int* const p1;   typedef int* pointer; ...

  9. C++之指向const对象的指针和const指针

    1.指向const对象的指针 我们可以通过指针来修改其所指对象的值,但如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针也是const类型. ...

  10. const的理解、const指针、指向const的指针

    1.const 的理解 const 是C语言的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量(也就是不可以作为左值),绝对不是将这个变量变为常量.也就是说经过const 修饰的 ...

最新文章

  1. libIlmImf-2_2.so.22 :cannot open shared object file :No such file or direct
  2. pytorch 状态字典:state_dict 模型和参数保存
  3. openresty开发系列24--openresty中lua的引入及使用
  4. 数据库-in子句-exists子句
  5. 计算机分级时无法度量视频播放,Win7 64位系统电脑评分出现“无法度量视频播放性能”怎么解决...
  6. 第8,9,10章读后感
  7. 将Notepad++配置为Python编译器
  8. 实验5.2 动态内存分配生成动态数组完成矩阵转置
  9. Unity学习笔记(一)——C#语法基础
  10. session与cookie的区别和用法
  11. Centos7搭建openV pn服务器
  12. 怎么推广“外卖CPS项目”赚佣金?(饿了么美团外卖红包小程序搭建教程)
  13. 【嵌入式13】两台电脑串口通信
  14. win10打开视频显示服务器运行失败,apache启动失败,详细教您快速解决Win10系统apache启动失败...
  15. 使用prophet库分析航空出行人次规律
  16. Java艺术字图片生成
  17. 河北安格计算机专修学院简介,石家庄那23家院校被取消办学资格?
  18. myBase Desktop 6.x 用户手册
  19. c 空间点到直线的垂足及距离计算
  20. Javascript(前端知识)----------基础语法

热门文章

  1. (按位取反)运算的理解
  2. 动态链接库和静态链接库的区别
  3. php-fpm启动,重启,终止操作
  4. FL Studio教程之Fruity Blood Overdrive插件
  5. ARM嵌入式主板之路
  6. SIGCHLD信号(重点)
  7. linux下电路仿真软件下载,Linux下电路仿真.pdf
  8. 12、Pytest之@pytest.mark.自定义标签使用
  9. 二叉树后序遍历非递归算法(详解)
  10. 让Windows XP也能自动登录