常指针

**

指向对象的常指针和指向常对象的的指针基本用法和注意事项:

**

# include <iostream>
# include <string>
using namespace std;

class Time
{
public:
	Time(int h = 10, int m = 30, int s = 59):hour(h), minter(m), sex(s){};
	void out_value();
	void set_value(int, int, int);
	void fun(const Time *p);   //使用指向常对象的指针作为形参,可以接收非const对象的实参也可接收const对象的实参
							   //即使接收的是非const对象,也可以防止其对象的值被修改,
							   //若传入的实参是const对象,则只能使用指向常对象的指针作为形参
	int hour;
	int minter;
	int sex;
};
int main(void)
{
	//指向对象的常指针:
	/*
	Time t1(10, 10, 10), t2;
	Time * const p1 = &t1;  //正确定义指向对象的常指针,p1始终指向t1
	Time * const p1;   //必须在p1初始化给予初值,否则p1会指向系统未分配的空间(是一个垃圾值)
	p1 = &t1;		   //error:即在其初始化时将其指向一个对象,此后不可在改变
	*/
	//p1 = &t2;//error:p1是指向t1的常指针,不能改变使其指向t2
	
	//指向常对象的指针:
	Time t2(9, 9, 9), t3;
	const Time * p2;  //定义指向常对象的指针
	p2 = &t2;		  //正确:p2可以指向非const的对象
	//p2->hour = 12;  //error:该对象中的数据成员不能通过p2来改变
	//p2->set_value(10,10,11);  //error:
	//p2->out_value();          //      不能使用指向常对象的指针引用普通成员函数
	t2.set_value(10,10,11); //正确:
	t2.out_value();         //     可以使用原对象名引用普通成员函数
	p2 = &t3;         //正确:指向常对象的指针可以改变其指向的对象,即:可以改变p2中存储的地址,使其指向另一个对象

	return 0;
}

void Time::set_value(int h, int m, int s)
{
	hour = h;
	this->hour = h;
	(*this).hour = h;

	minter = m;
	sex = s;
}
void Time::out_value()
{
	cout << hour << ":" << minter << ":" << sex << endl;
}

### C++ 常指针使用方法与特性 #### 1. 常指针的定义 常指针是指向常量数据的指针,它限制了通过指针修改所指向的数据的能力。声明常指针时,使用 `const` 关键字修饰指针所指向的数据类型[^4]。例如: ```cpp const int* ptr = &value; ``` 上述代码中,`ptr` 是一个指向常量整数的指针,不能通过 `ptr` 修改所指向的值。 #### 2. 常指针的特性 - **不可修改指向的数据** 如果指针被声明为指向常量数据,则无法通过该指针修改所指向的数据[^4]。例如: ```cpp const int value = 10; const int* ptr = &value; *ptr = 20; // 编译错误:不能通过常指针修改数据 ``` - **指针本身可变** 虽然常指针不能修改指向的数据,但可以改变指针本身使其指向其他常量数据[^4]。例如: ```cpp const int value1 = 10; const int value2 = 20; const int* ptr = &value1; ptr = &value2; // 允许改变指针指向 ``` - **指针和数据均不可变** 如果需要同时限制指针本身和指向的数据不可变,可以使用双重 `const` 修饰[^4]。例如: ```cpp const int* const ptr = &value; ptr = &anotherValue; // 编译错误:指针本身不可变 *ptr = 20; // 编译错误:指向的数据不可变 ``` #### 3. 常指针的应用场景 - **保护数据完整性** 使用常指针可以防止意外修改数据,确保数据的安全性和完整性[^4]。例如,在函数参数传递中,使用常指针可以避免对原始数据的修改。 ```cpp void printValue(const int* ptr) { std::cout << *ptr << std::endl; } ``` - **接口设计中的约束** 在设计函数或类接口时,常指针可以明确表达意图,表明函数不会修改传入的数据[^4]。这有助于提高代码的可读性和可维护性。 #### 4. 示例代码 以下是一个完整的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值