【转】作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer

对于指针和常量,有以下三种形式都是正确的:

const char * myPtr = &char_A;//指向常量的指针
char * const myPtr = &char_A;//常量的指针
const char * const myPtr = &char_A;//指向常量的常量指针

下面依次对这三种类型进行介绍。

因为*操作符是左操作符,左操作符的优先级是从右到左,对于

1.常量指针(Constant Pointers)

int * const p

先看const再看* ,是p是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向的地址上存储的值可以修改。

实例1:

#include<iostream>
#include<stdlib.h>
using namespace std;void main()
{int i1=30;int i2=40;int * const pi=&i1;//这里的pi指针式常量。//pi=&i2;     //注意这里,pi不能再这样重新赋值了,即不能再指向另一个新地址。所以我已经注释了它。printf("%d\n", *pi ) ;   //输出是30i1=80;     //5.想想看:这里能用*pi=80;来代替吗?可以,这里可以通过*pi修改i1的值。printf("%d\n", *pi ) ;   //输出是80system("pause");
}

实例2:

char char_A = 'A';
char char_B = 'B';char * const myPtr = &char_A;
myPtr = &char_B;    // error - can't change address of myPtr

2.指向常量的指针(Pointers to Constants)

const int *p

先看*再看const,定义一个指针指向一个常量,不能通过指针来修改这个指针指向的值。

实例3:

#include<iostream>
#include<stdlib.h>
using namespace std;void main()
{int i1=30;int i2=40;const int * pi=&i1;printf("%d\n", *pi ) ;   //输出是30pi=&i2;     //注意这里,pi可以在任意时候重新赋值一个新内存地址i2=80;     //想想看:这里能用*pi=80;来代替吗?当然不能printf("%d\n", *pi ) ;   //输出是80
system("pause");
}

实例4:

char char_A = 'A';
const char * myPtr = &char_A;
*myPtr = 'J';    // error - can't change value of *myPtr

所以指针p所指向的整型数是一个常量,其值不能被修改。

3.指向常量的常量指针

对于“指向常量的常量指针”,就必须同时满足上述1和2中的内容,既不可以修改指针的值,也不可以修改指针指向的值。

4.引入字符数组和字符指针

字符数组和字符指针的定义如下:

char a[] = "I Love You!"; //定义了一个字符数组
char *p = "I Love You!";  //定义了一个字符指针

可以将a理解为常量指针,而p为指向常量的指针,代码实例如下:

#include<iostream>
#include<stdlib.h>
using namespace std;void main()
{char a[] = "I Love You!"; //定义了一个字符数组,数组名a是一个常量指针,指向的位置不变,都是数组第一个元素的位置char *p = "I Love You!";  //定义了一个字符指针,指针p指向一个字符串常量,这个字符串常量不能修改//*(p+1)='a';//错误,不可以修改指针指向的值,所以这里注释掉。a[1]='a';//常量指针,不能修改指针的值,但是可以修改指针所指向的值。//a=p;//错误,a是常量指针,不可修改其值。cout<<a<<endl;cout<<p<<endl;cout<<a[1]<<endl;cout<<*(p+2)<<endl;system("pause");
}

输出值为:

IaLove You!
I Love You!
a
L

转载于:https://www.cnblogs.com/liez/p/5484860.html

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)相关推荐

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

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

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

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

  3. 函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。

    ①函数指针 函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所 ...

  4. const int * 、int * const、int const* 、const int a(){ } 和int a()const { }的区别和联系

    前言:很多人都把const int * .int * const.int const* 的区别和联系搞混,我自己在学习C++的过程中,也经常性          弄不 清楚,今天特意总结一下,作为学习 ...

  5. 喜闻乐见的const int *p、int* const p、const int* const p

    不废话直接代码示例: 1 void f(const int *p) { 2 3 int b = 10; 4 5 *p = 10; // error 6 7 p = &b; // fine 8 ...

  6. 2020-09-21C++学习笔记之与C语言区别和加强——四种const意义(const int a; int const b; const int *c; int * const d)

    2020-09-21C++学习笔记(const int a; int const b; const int *c; int * const d) 这两天在上课更新晚了. 1.C/C++中的const ...

  7. int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

     加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = # 1.       可以读自己 2.       可以通过*p改自己 3.       可以 ...

  8. const int *a和int*const a 的区别详解

    补充知识 "const int i"与"int const i"之间的区别 对变量来说,const 关键字可以限定一个变量的值不允许改变,从而保护被修饰的东西, ...

  9. const int *p与int *const p的区别

    From: http://blog.csdn.net/suer0101/article/details/8032269 本文只是一篇学习笔记,是看了<彻底搞定C指针>中的相关篇幅后的一点总 ...

最新文章

  1. 心得丨老生常谈:普通程序员到底如何入门深度学习?
  2. matlab中怎样将字母倒叙,如何用matlab将文档里的数按行倒序输出
  3. 怎样在ppt中加入随机抽号_潮流女生怎样穿更时髦?经典中加入个性,减龄时尚还高级,快入坑...
  4. 帆软JS鼠标悬停列标题高亮显示/改变选中行行高
  5. ffmpeg-20160517-git-bin
  6. Keras版GCN源码解析
  7. 淘淘商城系列(一)—— 淘淘商城介绍(二)
  8. W3School 离线手册最新版下载
  9. 摄影名词解释 (ISO、快门、光圈、曝光、测光与测光模式、曝光补偿、焦距、光学变焦与数码变焦、景深与光圈优先、白平衡与RAW)
  10. 使用安卓手机自建 KMS 服务器激活Windows系统(任意安卓手机 无需 Root)
  11. Hibernate 第一个程序的问题Unknown entity(新手必看)
  12. Exp6 信息搜集与漏洞扫描 20164302 王一帆
  13. 基于WPS的在线编辑服务【.net Core 3.1】
  14. arduino 步进电机驱动库_Arduino驱动 步进电机
  15. Cornerstone清除缓存
  16. 通过 Q-learning 深入理解强化学习-附带代码实现
  17. linux openssl 编译错误,“致命错误:openssl/opensslv.h:没有这样的文件或目录”编译mitmproxy...
  18. STM8L的RAM与内存模型
  19. 我们不再是冷暖自知的个体
  20. UPS电池容量检测方法

热门文章

  1. 信号的采样与恢复matlab实验报告,实验七 连续信号的采样与恢复
  2. (扩展欧几里得)青蛙的约会
  3. ajax 链接java_如何使用ajax将下拉菜单链接到表
  4. horizon client 无法识别域_iText for Mac(OCR识别图中文字工具)
  5. 硬核!从0到1学习Spring Cloud微服务章节《建议收藏》
  6. 人人开源 VUE项目报错./src/assets/scss/index.scssModule build failed: Error: ENOENT: no such file or direct
  7. 抽象类和抽象方法----java
  8. mysql 严格模式_MySQL 开启/关闭 严格模式(Strict Mode)
  9. 东莞市商业学校计算机平面设计在哪个校区,东莞市商业学校
  10. python清空语句_怎么清除python编译器的语句