三者的区分

简而言之~

常指针:地址不可变,内容可变

指向常量的指针:地址可变,内容不可变

指向常量的常指针:地址不可变,内容不可变

样例

代码如下:

#include <iostream>
using namespace std;
int main()
{/************指向常量的常指针(把指针所指的地址声明为常量,所指向地址中存放的内容也不能改变)************/const char *const name1="chen";//声明一个指针变量name1,name1指针指向"chen"字符串的首地址/*-------name1【name[0]】--> |  c  |-------|  h  |-------|  e  |-------name1[3]--> |  n  |-------*/name1[3]='a';//错误【name1为指针,指向”chen“字符串的首地址(相当于一个有一个数组name1,name1[3]即表示该数组中下标为3的元素)】name1="lin";//错误【该语句表示,将该指针改为指向”lin“字符串的首地址,错误】name1=new char[5];//错误【该语句表示,new一个char型数组,将该指针改为指向该char型数组的首地址,错误】cout<<name1[3]<<endl;//正确,输出字符n/************常指针(把指针所指的地址声明为常量,所指向地址中存放的内容可以改变)************/
//声明一个指针变量name2,该指针为指向字符型数据的常指针,用“chen”字符串的存储地址初始化该指针char *const name2="abcd";cout<<name2<<endl;name2[3]='q';//正确(地址为常量,该地址内存储的内容可以改变)name2="lin";//错误(地址不可变)name2=new char[5];//错误(该语句表示创建一个char型数组,将该数组的首地址赋值name2指针,即使指针指向char[5]数组的首地址,地址不可变,因此该语句错误)name2=new char('q');//错误(该语句表示new一个char型变量,并初始化该变量为q,将name2指针指向该char型变量的地址,错误)/************指向常量的指针(指针所指的地址可以改变,所指向地址中存放的内容不能改变)************/
const char *name3="because";
char x='p';
char y[9]="dgaogd";
name3[2]='s';//错误【存储内容不可改变】
name3=&x;//正确【地址可以改变】
name3=y;//正确【地址可以改变】
name3=y[3];//错误【内容不可变】
}

常指针、指向常量的指针、指向常量的常指针相关推荐

  1. 常量 数组 函数 枚举 结构体与指针

    与指针括起来的是指针(*a) int const *a = &b; /* 常量指针 */ int (*a)[5]; /* 数组指针 */ int (*add)(int a, int b); / ...

  2. C++:将char*指针强制转换成一个指向结构体的指针

    在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...

  3. 关于空指针(指针指向为NULL)和void类型的指针的理解

    正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...

  4. C语言学习之通过指针变量调用它所指向的函数

    通过指针变量调用它所指向的函数 int main(){int max(int,int);//函数声明int (*p)(int,int);//定义指向函数的指针变量pint a,b,c;p=max;// ...

  5. 删除 字符串中‘*’号 两端的除外。指针h、p分别指向第一个和最后一个字符

    //删除 字符串中'*'号 两端的除外.指针h.p分别指向第一个和最后一个字符 #include <stdio.h> void fun( char *a, char *h,char *p ...

  6. 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题

    我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队 ...

  7. c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针

    指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...

  8. 怎么样让指针指向尾结点C语言,带头结点头指针与带头结点尾指针的学习

    单循环链表 对于单链表而言,如果每次在遍历到单链表中间处时需要遍历整个链表,此时只能往后遍历,前方的指针便会丢失.如图1所示,此时若链表遍历到a2处依旧可以通过尾结点循环到a1处,这是单链表所不能解决 ...

  9. python 指针指向的内容,python-文件的读取及指针位置

    文件的读取及指针位置 打开文件的三步:打开->操作->关闭 文件的读取: f = open('/tmp/passwd')打开 f.close()操作完,关闭文件 判断文件对象拥有的权限 p ...

  10. while循环中指针会自动释放吗_C++】C++常见面试题汇总_持续更新中...

    1:指针(*).引用(&).解引用(*).取地址(&).的概念和区别 概念: 指针指向一块内存,指针保存的是内存的地址:引用是变量的别名,本质是引用该变量的地址. 解引用是取指针指向的 ...

最新文章

  1. MatLab画图总结
  2. 手把手部署Linux下磁盘配额(quota)应用与实战
  3. pandas的DataFrame转化为Datatable的DataFrame
  4. MongoDB基本操作(增删改查)
  5. 计算机bq,BQ24721部分翻译
  6. 前端学习(1254):Vue前后端交互方式
  7. 3分钟学会SVN:SVN快速上手
  8. Gale-Shapley算法
  9. extJS 中 ext.data 介绍
  10. Vista初级使用技巧及故障总结
  11. Multiple methods named 'status' found with mismatched result, parameter type or attributes
  12. (05)FPGA内部资源
  13. Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
  14. 用 convert2rhel 工具将 CentOS 迁移至 RHEL
  15. php devel 5.3.3 26,php-5.3.27安装
  16. openwrt(路由器)的源码地址
  17. 计算机软件专业代码表,2019-04-09 计算机软件适用的国民经济行业代码表
  18. python自定义拼音输入法_Python与HMM实现简单拼音输入法
  19. 小程序 Vant Weapp 使用插槽自定义 Cell 的左侧图标
  20. 网络设置里计算机为什么有两个字,一计算机网络操作题.doc

热门文章

  1. 量子叠加态系数_1.2 量子比特
  2. 算法系列之赫夫曼编码实战一【数据压缩、数据解压】
  3. Mybatis映射文件动态SQL语句-02
  4. Spring Boot——统一设置返回Json数据风格(Java驼峰命名法转下划线命名法)解决方案
  5. Spring Boot——[Unable to start LiveReload server]解决方案
  6. BugKuCTF 杂项 telnet
  7. semget创建文件_linux信号灯操作
  8. Java线程安全StampedLock
  9. Mysql对string类型转换int类型的小问题
  10. jQuery ajax使用方法