c++中 const与指针

const与指针这块自己一直理解的朦朦胧胧的,今天在vs上专门做个一些测试,特此记录。

const与指针一般有两种情况:,一是修饰指针指向的对象,二用const修饰指针.

如 :

int age = 23;
const int *pt = &age;

该声明指出,pt指向一个const int,因此不能用pt来修改这个值,即*pt的值为const,但是并不代表它指向的值实际就是一个常量,也就是说pt的地址是可变的:

int age = 23;
const int *pt = &age;
int sage = 30;
*pt = sage;//错误,*p不能直接修改
pt = &sage;//正确

此时*pt的值为30。

接下来看第二种

int age = 23;
int *const pt1 = &age;
int sage = 30;
pt1=&sage//错误,pt2的地址不能修改
*pt1=sage //正确

可以看出pt1的地址是不能够被修改的,但是却可以修改其指向的值,此时*pt1=30

下面看一下整体的运行结果:

#include<iostream>
using namespace std;
int main()
{
	int age = 23;
	const int *pt = &age;
	int *const pt1 = &age;
	cout << "pt的值:" << *pt << "\n";
	cout << "pt的地址:" << pt << "\n";
	cout << "pt1 的值:" << *pt1 << "\n";
	cout << "pt1的地址:" << pt1 << "\n";
	int sage = 30;
	//pt1=&sage  错误,pt2的地址不能修改
	*pt1 = sage; //正确
	// *pt = sage; 错误,*p不能直接修改
	pt = &sage;//正确
	cout <<"\n"<< "/*         修改后的值和地址  */ "<<"\n";
	cout <<"\n"<< "pt的值:" << *pt << "\n";
	cout << "pt的地址:" << pt << "\n";
	cout << "pt1 的值:" << *pt1 << "\n";
	cout << "pt1的地址:" << pt1 << "\n";

}

运行结果:

可以看出常指针代表其地址是不可改变的,但是指向对象的值确是可以改变的,指向常量的指针,其常量不能改变但是其地址确是可以改变的。

猜你喜欢

转载自blog.csdn.net/zzzzjh/article/details/82254372