zoukankan      html  css  js  c++  java
  • 指向变量的常指针和指向常变量的指针

    刚接触到指针时,关于指向变量的常指针和指向常变量的指针容易混淆,所以整理下,希望能够帮助自己也帮助到大家。

    常(量)指针

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

    用常指针指向常变量

    实际上,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;
    }
    

    运行结果:

    小结:指针常量指的是指针本身是一个常量,赋予初值以后就不可以更改。虽然指针的值不可以更改,但是它指向的变量的值是可以通过*p来进行更改的。


  • 相关阅读:
    Centos 下安装php
    php 基础 PHP保留两位小数的几种方法
    php基础 php 全局变量
    php 基础 语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
    php 基础 获取远程连接
    php 基础 php获取前一天,前一个月,前一年的时间
    redis 基础 Redis 数据类型
    [Poj2349]Arctic Network(二分,最小生成树)
    [USACO07DEC]Sightseeing Cows(负环,0/1分数规划)
    [Tyvj2032]升降梯上(最短路)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3331215.html
Copyright © 2011-2022 走看看