【转】作者: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=;
int i2=;
int * const pi=&i1;//这里的pi指针式常量。
//pi=&i2; //注意这里,pi不能再这样重新赋值了,即不能再指向另一个新地址。所以我已经注释了它。
printf("%d\n", *pi ) ; //输出是30
i1=; //5.想想看:这里能用*pi=80;来代替吗?可以,这里可以通过*pi修改i1的值。
printf("%d\n", *pi ) ; //输出是80
system("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=;
int i2=;
const int * pi=&i1;
printf("%d\n", *pi ) ; //输出是30
pi=&i2; //注意这里,pi可以在任意时候重新赋值一个新内存地址
i2=; //想想看:这里能用*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[]='a';//常量指针,不能修改指针的值,但是可以修改指针所指向的值。
//a=p;//错误,a是常量指针,不可修改其值。
cout<<a<<endl;
cout<<p<<endl; cout<<a[]<<endl;
cout<<*(p+)<<endl; system("pause");
}

输出值为:

IaLove You!
I Love You!
a
L

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)的更多相关文章

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

    先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...

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

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

  3. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  4. C++ 指针(不论什么一个指针本身的类型都是unsigned long int型)

    1.指针数组: 即 数组的元素是指针型; 例:int*pa[2]; 明明是一维的指针数组.竟当作二维数组用. [cpp] view plain copy //利用指针数组存放单位矩阵 #include ...

  5. const int * p 和 int const * p 和 int * const p 的区别

    首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...

  6. const int *p与int *const p的区别(转:csdn,suer0101)

    本文只是一篇学习笔记,是看了<彻底搞定C指针>中的相关篇幅后的一点总结,仅此而已! 一.先搞清const int *p与int const *p的区别 它们的区别就是:没有区别!! 无论谁 ...

  7. C++ char*,const char*,string,int 的相互转换

    C++ char*,const char*,string,int 的相互转换   1. string转const char* string s ="abc";const char* ...

  8. const int *p 和int * const p 的区别

    看例子: int sloth = 3; const int *p1 = &sloth; int * p2 const = &sloth; 这样申明的话,不允许使用p1来修改sloth的 ...

  9. (c++) int 转 string,char*,const char*和string的相互转换

    一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...

随机推荐

  1. BZOJ3932: [CQOI2015]任务查询系统 主席树

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4869  Solved: 1652[Submit][St ...

  2. HDU--4417 Super Mario (主席树模版题)

    题目链接 题目让求 L R区间 不大于H 的数有多少 数据太大需要离散化 #include<bits/stdc++.h> using namespace std; #define maxn ...

  3. 从密码到token, 一个授权的故事 auth2.0

    1 美好的旧时光 我经常怀念三十年前那美好的旧时光, 工作很轻松, 生活很悠闲. 上班的时候偶尔有些HTTP的请求发到我这里, 我简单的看一下, 取出相对应的html文档,图片,发回去就可以了, 然后 ...

  4. bzoj2554: Color

    Description 有n个球排成一列,每个球都有一个颜色,用A-Z的大写字母来表示,我们每次随机选出两个球ball1,ball2,使得后者染上前者的颜色,求期望操作多少次,才能使得所有球的颜色都一 ...

  5. (三)orcale体系结构

    https://www.cnblogs.com/chengxiao/p/5904783.html 一.什么是Oracle数据库? 众所周知,Oracle DataBase是一款关系型数据库管理系统(不 ...

  6. http请求415错误Unsupported Media Type

    王子乔 每一个认真生活的人,都值得被认真对待 http请求415错误Unsupported Media Type 之前用了封装的ajax,因为请求出了点问题,我试了下jQuery的$.ajax,报出了 ...

  7. KMP之计算Next数组

    KMP的Next数组:模式串的前缀与后缀的“相交”长度 KMP算法步骤: 1.先算next数组 2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置 a.Next[j] \geq ...

  8. python自动化开发-[第二十天]-form表单,CBV和FBV,序列化

    1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...

  9. OpenRefine

    无论是现今的大数据还是企业内部的小数据,都存在一些普遍的问题,如数据格式不对需要转换,一个单元格内包含多个含义的内容,包含重复项等等,虽然我们也可以使用excel解决,但是excel天生有诸多限制,比 ...

  10. flask 模版语言及信息传递

    if语句 格式: {% if command %} {% elif %} {% else %} {% endif %} 代码示例 flask_one.py #encoding:utf-8 from f ...