摘自http://www.myexception.cn/cpp/1900041.html

const int *p 为什么可以不初始化?
c++ primer 5th  
P53 写道:const 对象一旦创建后其值就不能再改变,所以const对象必须初始化。
但在 P57 中练习2.28的第(e)题为什么判断为合法呢?为什么可以不用初始化呢?

(e)const int *p;           // legal. a pointer to const int

------解决思路----------------------

const int *p; // p是指针,指向const int类型数据
int * const p; // p是常指针,指向int类型数据
const int * const p; // p是常指针,指向const int类型数据

------解决思路----------------------
const 对象一旦创建后其值就不能再改变,所以const对象必须初始化。
LZ对于这句话中的const对象要弄清楚:
const int *p中,const对象是*p(即*p的值是只读),而对于此句“const对象必须初始化”,一般用法中我们是要给指针p初始化,而不是给*p初始化。所以在此可以不初始化。即使在声明是进行初始化(const int* p = 0x123456),也是在对指针p初始化,等价于如下一般用法:
对此的用法一般如下:
const int *p;
p = 0x123456;(此时是在给指针p赋值,而不是给*p赋值)

int* const p中,const对象是p,此时在指针p声明时必须初始化。
一般用法:
int* const p = 0x123456;
------解决思路----------------------
遇到const修饰的指针,需要注意有两种可能:
1、指针变量指向的值无法改变
2、指针变量本身无法改变
例如:

int a = 10;
const int *p;
p = &a;
*p = 3; // 错误,通过此指针改变指向的值
int b = 5;
p = &b; // 正确 int c = 10;
int * const p = &c;
*p = 5; // 正确
int d = 5;
p = &d; // 错误,指针变量不能改变

------解决思路----------------------
(1) int *p  -- p是个非const指针,指向的对象是int;
(2) const int *p  --  p是个非const指针,指向的对象是const int;
(3) int * const p  -- p是个const指针,指向的对象是int;
(4) const int * const p  -- p是个const指针,指向的对象是const int。
以上四个都是定义指针p,如果初始化是指初始化指针p,而不是它所指向的对象,由于(3)和(4)中指针p是const的,所以必须初始化。(1)和(2)中的指针p是非const的,可以不初始化。

#const#const int *p 为何可以不初始化的更多相关文章

  1. const int *pi与int&nbs…

    此质料是摘要:<<彻底搞定C 指针 >>,自己感觉比较有价值,现与大家分享. 1. 从const int i 说起 你知道我们声明一个变量时象这样int i :这个i是可能在它 ...

  2. int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的差别

     加有constkeyword的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = &num; 1.       能够读自己 2.       能够通过*p改自己 ...

  3. C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化

    C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初 ...

  4. int *const && int const * && const int *的区别

    ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和in ...

  5. c语言检测文件是否存在int __cdecl access(const char *, int);

    最近写代码,遇到很多地方需要判断文件是否存在的.网上的方法也是千奇百怪,“百家争鸣”. fopen方式打开的比较多见,也有其他各种方式判断文件是否存在的,由于其他方法与本文无关,所以不打算提及. 笔者 ...

  6. const volatile int i

    问题: const volatile int i=10:这行代码有没有问题?如果没有,那 i 到底是什么属性? 回答: 没有问题,例如只读的状态寄存器.它是volatile,因为它可能被意想不到地改变 ...

  7. const vector<int> 和 vector<const int>问题讨论

    1.const vector <int> vec(10) —— 与const int a[10]是一回事,意思是vec只有10个元素,不能增加了,里面的元素也是不能变化的 vector&l ...

  8. C++学习五 const vector<int>类型的迭代器使用

    一情景: 算法功能:对于传入的vector, 能够找到两个数字,使其相加之和为target,然后返回这两个数字的位置(也就是秩) 最开始是这样的一个问题: 对于一个传入的const vector< ...

  9. char * const * (*a) (int b)

    char * const * (*a) (int b), 按照c++ program language的读法,从右往左读,* 读作pointer to 把(*a) (int b看作整体, (*a) ( ...

随机推荐

  1. 11.14 luffycity项目(6)

    2018-11-14 21:26:45 实现了购物车功能! 涉及到了redis的使用  需要在pycharm中下载   django_redis 其他的看一下笔记,有购物车里面数据存储的结构才发现数据 ...

  2. AUC计算 - 手把手步进操作

    2017-07-10 14:38:24 理论参考: 评估分类器性能的度量,像混淆矩阵.ROC.AUC等 http://www.cnblogs.com/suanec/p/5941630.html ROC ...

  3. day14 十四、三元运算符,推导式,匿名内置函数

    一.三元(目)运算符 1.就是if...else...语法糖 前提:if和else只有一条语句 # 原来的做法 cmd = input('cmd:>>>') if cmd.isdig ...

  4. 通过阿里云命令行工具 aliyuncli 购买服务器

    开始想通过 aliyuncli 的 golang 源码进行编译安装(注:python 版的 aliyuncli 已不再维护),但没成功,详见 通过 golang 源码编译阿里云命令行工具 aliyun ...

  5. 1.7Oob方法的作用

    public class Exse2 { public static void main(String[] args) { sumIntLong(10,15); sumIntLong(20,30); ...

  6. Jenkins在windows服务器上依赖的maven仓库目录

    1.在windows server 2008上,maven仓库路径为: C:\Users\用户名\.m2 2.在windows server 2003上(加入域的服务器),maven仓库路径为: C: ...

  7. typescript 如何引入jquery

    webpack配置,不需要配置externals,webpack具体配置如下, const webpack = require('webpack'); const path = require('pa ...

  8. darknet集成遇到的问题以及解决方法

    将darknet集成进工程时,遇到了一些问题,下面记录一下解决方法: 集成步骤: 首先在yolo编译的时候,需要将三个开关打开: #define GPU#define CUDNN#define OPE ...

  9. SpringMVC Maven项目 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServle

    今天在搭建SpringMVC开发框架时,遇到了一个问题,尽管在maven的POM.xml文件中配置了项目所依赖的jar包,但在启动项目是已然报错如下: 信息: Starting Servlet Eng ...

  10. nginx cookie 丢失问题