一级指针相互赋值

int a=10;int *p1=&a;
const int *p2=&a;
int * const p3=&a;int *q1=&a;
const int *q2=&a;
int *const q3=&a;

p1=q1; 可以。int * -> int *

p1=q2; 不可以。const int *p1 -> int *p2

const修饰类型为int,修饰内容为*p1,也即*p1不可改变。把p1给了p2,有可能通过改变*p2而改变了*p1。

p1=q3; 可以。int *const p1 -> int *p2

const修饰类型为int *,修饰内容为p1,也即p1不可改变。把p1给p2,p1不作为左值,是可以的。

p2=q1; 可以。int *p1 -> const int *p2

const修饰类型为int,修饰内容为*p2,也即*p2不可改变。把p1给了p2,只是改变了p2。

p2=q2; 可以。const int * -> const int *  相同类型之间赋值

p2=q3; 可以。int * const p1 -> const int *p2

const修饰类型为int *,修饰内容为p1,也即p1不可改变;

const修饰类型为int,修饰内容为*p2,也即*p2不可改变。把p1给了p2。

p3=q1; 不可以。int *p1 -> int * const p2

const修饰类型为int *,修饰内容为p2。所以把p2当左值的操作都是不允许的。

p3=q2; 不可以

p3=q3; 不可以

二级指针相互赋值

int a = 10;
int *b = &a;
const int * c = &a;int** p1;
const int **p2;
int *const *p3;
int **const p4 = &b;int** q1;
const int **q2;
int *const *q3;
int **const q4 = &b;

如果赋值符两边const修饰的类型中都有*号,可以将两边的*删掉,做简化。简化后如果只剩一级指针,就当一级指针看。如果不能简化,二级指针要看双向,任何一方都不允许改变对方,要保证两边都不被泄露。

p1 = q1; 可以。int ** p1 -> int ** p2

p1 = q2; 不可以。const int ** p1 -> int ** p2

const修饰的类型是int,修饰的内容是**p1,也即**p1不许改变。将p1给了p2,有可能通过改变**p2而改变了**p1。

p1 = q3; 不可以。int const *p1 -> int * p2

const修饰的类型是int,修饰的内容是*p1,也即*p1不许改变。将p1给了p2,可能通过改变*p2而改变*p1。

p1 = q4; 可以。int const p1 -> int p2

p1不可改变,将p1给了p2。

p2 = q1; 不可以。int ** p1 -> const int ** p2

**p2不可以改变,将p1给了p2,**p1的改变会带来**p2的改变。(看双向)

p2 = q2; 可以。const int ** -> const int **

p2 = q3; 不可以。int * const *p1 -> const int ** p2

*p1不可改变,**p2不可改变。将p1给了p2,改变*p2会带来*p1的改变。

p2 = q4; 不可以。int ** const p1 -> const int ** p2

p1不可改变,**p2不可改变。将p1给了p2,改变**p1会带来**p2的改变。

p3 = q1; 可以。int * p1 -> int const * p2

去了*,就当一级指针,不用看双向。*p2不可改变。将p1给了p2。

p3 = q2; 不可以。const int ** p1 -> int * const * p2

**p1不可改变,*p2不可改变。把p1给了p2,改变**p2可能带来**p1的改变。

p3 = q3; 可以。int *const * p1 -> int * const * p2

p3 = q4; 可以。int * const p1 -> int const * p2

p1不可以改变,*p2不可以改变。把p1给了p2。

p4 = q1; 不可以。int ** p1 -> int ** const p2

p2不可以改变,所以把p2当做左值的操作都是不允许的。

p4 = q2; 不可以。

p4 = q3; 不可以。

p4 = q4; 不可以。

【C/C++】与const有关的指针类型赋值相关推荐

  1. opendir 从不兼容的指针类型赋值

    // open DIRs DIR *dir;struct dirent *dirp;if ((dp=opendir(fullpath))==NULL){write_log("No such ...

  2. Primer笔记——typedef指针类型别名时的const陷阱

    目录 一.typedef int* pint 与 const pint 二.typedef const int *pint 与 pint 三.总结 <C++ Primer>中指出,type ...

  3. [C++] 指向常量的指针 VS 指针类型的常量

    指向常量的指针 VS 指针类型的常量 const 修饰指针时的位置不同,作用也不相同. 1. 指向常量的指针 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象. 例: i ...

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

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

  5. C++中void和void*指针的含义 (指针类型的含义)

    转载自:http://blog.csdn.net/lee_shuai 指针有两个属性:指向变量/对象的地址和长度,但是指针只存储地址,长度则取决于指针的类型:编译器根据指针的类型从指针指向的地址向后寻 ...

  6. 指针类型和指针类型转换的理解

    前几天在判断  "值相同的两个指针所指向的变量的值可以不同 "  这句话时,发现自己对指针类型一些概念仅仅是记住了结论.于是查阅了一些资料,记录一下一些与指针类型和指针类型转化相关 ...

  7. C++类指针类型的成员变量的浅复制与深复制

    本篇文章旨在阐述C++类的构造,拷贝构造,析构机制,以及指针成员变量指针悬空问题的解决.需要读者有较好的C++基础,熟悉引用,const的相关知识. 引言: 类作为C++语言的一种数据类型,是对C语言 ...

  8. 理解复杂的C/C++声明 const, typedef , 函数指针(转贴)

    让我们从一个非常简单的例子开始,如下: int n; 这个应该被理解为"declare n as an int"(n是一个int型的变量). 接下去来看一下指针变量,如下: int ...

  9. c++ 表达式必须包含指向类的指针类型_C++:18const关键字(附常量指针、指针常量、常量指针常量)...

    一.const变量的一些基本特点 ①const修饰的变量不能被修改 const int a=10; a=20;//错误 ②因为const修饰的变量不能被修改,所以必须被初始化 int a=10; co ...

最新文章

  1. python程序采用unicode编码、英文字符,Python 与 Unicode
  2. python【蓝桥杯vip练习题库】ALGO-69字符串逆序
  3. 需求工程-软件需求模式读书笔记3
  4. 记录第一次使用jni编译so包的入门操作
  5. 【转载】WinCE中串口驱动及接口函数介绍
  6. NYOJ 721 纸牌游戏 简单题
  7. C++primer第九章 顺序容器 9.1 顺序容器概述 9.2容器库概览
  8. 从有理数到实数和数的连续体
  9. lm723大电流可调电源电路图_高稳定大电流直流可调稳压电路
  10. ZZULIOJ 1107: 回文数猜想(函数专题)
  11. 常用JS库源码 - store.js源码/underscore.js源码
  12. 【华为云技术分享】鲲鹏弹性云服务器GCC交叉编译环境搭建指南
  13. eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
  14. mootools温习与深入_Element_1
  15. 微信公众号接入百度天气API接口
  16. 推荐一个Oracle数据库学习的网站
  17. 基于elementui的年月日周时间控件
  18. VirtualBox虚拟机安装教程
  19. #pragma once用法
  20. 优雅的git commit

热门文章

  1. Ubuntu下apache配置文件路径
  2. Truncate Table 删除表内容避免产生过多日志
  3. Timus 1079. Maximum
  4. Ngrok让你的本地Web应用暴露在公网上
  5. 蓝桥杯 ALGO-28 算法训练 星际交流
  6. 【Sublime】Mac下Sublime代码自动换行
  7. 最新快手面试题(含总结):设计模式+红黑树+Java锁+Redis等
  8. 【Vue】详解 SFC 与 vue-loader
  9. width 、 height 与 box-sizing : border-box ,content-box 的关系
  10. Linux 文件夹和文件大小排序