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来进行更改的。


  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/riskyer/p/3331215.html
Copyright © 2011-2022 走看看