C++中指向对象的常指针与指向常对象的指针详解
1. 常指针(const pointer)
常指针是指指针所指向的内存地址不可修改,但是可以通过指针来修改对象的值。在C++中,使用关键字const
来声明一个常指针。
示例代码1:
int main() {
int x = 10;
const int* ptr = &x;
// 修改指针指向对象的值是非法的,编译器会报错
*ptr = 20; // Error: assignment of read-only location '* ptr'
// 修改指针本身的值是合法的
ptr = nullptr;
return 0;
}
在上述示例中,我们声明了一个常指针ptr
,它指向一个const int
类型的对象x
。由于ptr
是常指针,所以不能通过*ptr
来修改x
的值,但是可以将ptr
指向其他内存地址。
示例代码2:
int main() {
int x = 10;
int y = 20;
const int* ptr = &x;
// 修改指针指向对象的值是非法的,编译器会报错
*ptr = 30; // Error: assignment of read-only location '* ptr'
// 修改指针本身的值是合法的
ptr = &y;
return 0;
}
在上述示例中,我们尝试修改ptr
指向对象的值,但是编译器报错。然后,我们将ptr
指向了另一个对象y
,这是合法的。
2. 指向常对象的指针(pointer to const object)
指向常对象的指针是指指针所指向的对象不可修改,但是可以通过其他方式来修改指针指向的对象的值。在C++中,使用关键字const
来声明一个指向常对象的指针。
示例代码1:
int main() {
const int x = 10;
int* const ptr = &x;
// 修改指针指向对象的值是非法的,编译器会报错
*ptr = 20; // Error: assignment of read-only variable 'x'
// 修改指针本身的值是非法的,编译器会报错
ptr = nullptr; // Error: assignment of read-only variable 'ptr'
return 0;
}
在上述示例中,我们声明了一个指向常对象的指针ptr
,它指向一个const int
类型的对象x
。由于ptr
是指向常对象的指针,所以不能通过*ptr
来修改x
的值,同时也不能修改ptr
自身的值。
示例代码2:
int main() {
const int x = 10;
int y = 20;
int* const ptr = &x;
// 修改指针指向对象的值是非法的,编译器会报错
*ptr = 30; // Error: assignment of read-only variable 'x'
// 修改指针本身的值是非法的,编译器会报错
ptr = &y; // Error: assignment of read-only variable 'ptr'
return 0;
}
在上述示例中,我们尝试修改ptr
指向对象的值和修改ptr
本身的值,但是编译器都会报错。
请注意在以上示例中,由于x
是常对象,它的值不能被修改,因此尝试通过指针来修改其值或者通过指针将其地址赋值给其他变量都是非法的。
希望以上内容能够对你理解C++中指向对象的常指针与指向常对象的指针有所帮助。如有疑问,请随时提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中指向对象的常指针与指向常对象的指针详解 - Python技术站