指向变量的常指针与指向常变量的指针详细解析

 更新时间:2013年10月14日 10:33:46   作者:  
刚接触到指针时,关于指向变量的常指针和指向常变量的指针容易混淆,所以整理下,希望能够帮助自己也帮助到大家

常(量)指针
常指针就是我们说的指向常量的指针,顾名思义,它是用来指向常量的。

用常指针指向常变量
实际上,C++规定只能用指向常变量的指针指向常变量,普通指针指向它就会报错,原因也很容易理解,我们用普通指针指向常变量之后,有可能就会进行改变常变量数值的操作,这样做是不被允许的。

常指针的定义方法:

复制代码 代码如下:

const 类型名  * 常指针名;

下面是它的一个简单的使用示例:
程序1.1.1
复制代码 代码如下:

#include<iostream>
using namespace std;
int main()
{
 const int i=5;//定义一个int型常变量
 const int *p;//定义一个int型常指针
 p=&i;//用常指针指向常变量
 cout<<*p<<endl;
 return 0;
}

运行结果:


如果我们使用普通指针变量来指向常变量:
程序1.1.2
复制代码 代码如下:

#include<iostream>
using namespace std;
int main()
{
 const int i=5;//定义一个常变量
 int *p;//定义了一个int型指针
 p=&i;//使用一般的指针指向常变量
 cout<<*p<<endl;
 return 0;
}

就会报错:

用常指针指向一般变量(非const型变量)
用常指针也是可以指向一般变量的,不过不可以通过常指针来更改一般变量的值,但是可以通过一般变量的变量名来修改变量的值。
下面看一个示例:

程序1.2.1

复制代码 代码如下:

#include<iostream>
using namespace std;
int main()
{
 int i=5;//定义一个一般变量
 const int *p;//定义了一个常指针
 p=&i;//使用常指针指向一般变量
 cout<<*p<<endl;
 i=10;//通过一般变量的变量名来修改值
 cout<<*p<<endl;
 return 0;
}


运行结果:

如果我们使用常指针来修改一般变量的值:

复制代码 代码如下:

*p=10;

就会报错:

小结:常指针可以指向常变量和一般变量,但是都不能通过指针改变它指向的变量的值。

指针常量
指针常量是指的指针本身就是一个常变量,一经赋初值就不可以被更改。
上面已经说过,只有常指针才可以指向常变量,所以指针常量只可以指向一般变量,而且一旦赋给了初值,就不可以再更改。

定义方法:

复制代码 代码如下:

类型名 * const 指针常量名=变量地址;

因为指针是常变量所以它在定义的时候就应该赋初值。

一个程序示例:

程序2.1

复制代码 代码如下:

#include<iostream>
using namespace std;
int main()
{
 int i=5;//定义一个一般变量
 int * const p=&i;//定义了一个指针常量
 cout<<*p<<endl;
 *p=30;//通过指针来改变指向的变量的值
 cout<<*p<<endl;
 return 0;
}

运行结果:

相关文章

  • 利用C语言如何实现一些简单图形的打印

    利用C语言如何实现一些简单图形的打印

    这篇文章主要给大家介绍了关于利用C语言如何实现一些简单图形的打印的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 基于OpenCV自定义色条实现灰度图上色功能代码

    基于OpenCV自定义色条实现灰度图上色功能代码

    今天通过本文给大家分享基于OpenCV自定义色条实现灰度图上色功能代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • 深度解析C语言中的变量作用域、链接和存储期的含义

    深度解析C语言中的变量作用域、链接和存储期的含义

    错误的定义C语言变量的作用域、链接和存储区在某种程度上会直接影响程序的设计,我们通过这篇博文介绍如何正确合理的定义一个C变量,感兴趣的朋友跟随小编一起学习吧
    2021-05-05
  • 基于C程序启动代码的深入分析

    基于C程序启动代码的深入分析

    本篇文章是对C程序启动的代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++ 虚函数及虚函数表详解

    C++ 虚函数及虚函数表详解

    这篇文章主要介绍了c++ 虚函数及虚函数表详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • 详谈全排列next_permutation() 函数的用法(推荐)

    详谈全排列next_permutation() 函数的用法(推荐)

    下面小编就为大家带来一篇详谈全排列next_permutation() 函数的用法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • OpenGL实现3D空间中移动图像

    OpenGL实现3D空间中移动图像

    这篇文章主要为大家详细介绍了OpenGL实现3D空间中移动图像,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C++实现LeetCode(25.每k个一组翻转链表)

    C++实现LeetCode(25.每k个一组翻转链表)

    这篇文章主要介绍了C++实现LeetCode(25.每k个一组翻转链表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt专栏之模态与非模态对话框的实现

    Qt专栏之模态与非模态对话框的实现

    这篇文章主要介绍了Qt专栏之模态与非模态对话框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • c++11可变参数使用示例

    c++11可变参数使用示例

    这篇文章主要介绍了c++11可变参数使用示例,需要的朋友可以参考下
    2014-03-03

最新评论