【转】作者: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. [ZJOI2016]大森林(LCT)

    题目描述 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种 ...

  2. Linux下搜狗输入法和快捷键Ctrl+Space冲突的解决

    配置快捷键(不是搜狗的设置) 把搜狗的启动快捷键给删了(如果有两个键盘[英+中],你按Shift就可以切换了,完全没必要占着茅坑) 其他快捷键冲突在键盘里面设置 over

  3. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  4. 第三十一篇-TextInputLayout(增强文本输入)的使用

    效果图: 密码使用的是增强文本输入类型,当密码长度小于6或者密码长度大于10的时候就会给出提示. main.xml 当添加TextInputLayout时,旁边会有一个下载符号,如果点不动,可以右键点 ...

  5. 第二十节,使用RNN网络拟合回声信号序列

    这一节使用TensorFlow中的函数搭建一个简单的RNN网络,使用一串随机的模拟数据作为原始信号,让RNN网络来拟合其对应的回声信号. 样本数据为一串随机的由0,1组成的数字,将其当成发射出去的一串 ...

  6. 常用工具类(System,Runtime,Date,Calendar,Math)

    一.System: 一个java.lang包中的静态工具类. 三大字段: static PrintStream err “标准”错误输出流. static InputStream in “标准”输入流 ...

  7. ajax-----readyState总结

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Linux truncate的使用方法介绍

    Linux truncate的使用方法介绍 参考资料:https://www.fengbohello.top/archives/linux-truncate 本命令缩减或扩充指定文件的大小为指定值.参 ...

  9. Journal Storage Directory not formatted

    类型一: 当你从异常信息中看到JournalNode not formatted,如果在异常中看到三个节点都提示需要格式化JournalNode. 如果你是新建集群,你可以重新格式化NameNode, ...

  10. Java的内省机制

    我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就 ...