指向变量的常指针和指向常变量的指针

本文转载自:https://blog.csdn.net/qsyzb/article/details/11862171

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

常(量)指针

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

用常指针指向常变量

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

常指针:课本定义:定义指向常量的指针只限定指针的间接访问只能读而不能写,而没有限定指针值的读写访问性。

常指针的定义方法:

1
2
const 类型名  * 常指针名;
类型名 const * 常指针名;

下面是它的一个简单的使用示例:

程序1.1.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>

using namespace std;

int main()

{

const int i=5;//定义一个int型常变量

const int *p;//定义一个int型常指针

p=&i;//用常指针指向常变量

cout<<*p<<endl;

return 0;

}

运行结果:

img

如果我们使用普通指针变量来指向常变量:

程序1.1.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>

using namespace std;

int main()

{

const int i=5;//定义一个常变量

int *p;//定义了一个int型指针

p=&i;//使用一般的指针指向常变量

cout<<*p<<endl;

return 0;

}

就会报错:

img

用常指针指向一般变量(非const型变量)

用常指针也是可以指向一般变量的,不过不可以通过常指针来更改一般变量的值,但是可以通过一般变量的变量名来修改变量的值。

下面看一个示例:

程序1.2.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;

}

运行结果:

img

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

1
*p=10;

就会报错:
img

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

指针常量

指针常量是指的指针本身就是一个常变量,一经赋初值就不可以被更改。

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

定义方法:

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

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

一个程序示例:

程序2.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>

using namespace std;

int main()

{

int i=5;//定义一个一般变量

int * const p=&i;//定义了一个指针常量

cout<<*p<<endl;

*p=30;//通过指针来改变指向的变量的值

cout<<*p<<endl;

return 0;

}

运行结果:

img

小结:

每一个指针都涉及两个对象,一个是该指针本身,一个是该指针指向的对象。

指向常变量的指针

定义方法:

1
2
const 类型名  * 常指针名;
类型名 const * 常指针名;

含义:指针是变量,是可以变化的,可以再指向其他的变量。但是,指针指向的数据不可以改变,相当于常变量。

指向变量的常指针

定义方法:

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

含义:指针是常变量,即指针本社不可以改变,常指针在定义的时候就必须初始化。一旦初始化,就不可以更改指针的值,不可以再指向其他变量。常指针可以指向普通变量,也可以指向常变量。

const出现在前面,则是指向常量的指针;const出现在后面,则是指向变量的常指针