在C++中,指针可以分为常量指针(const T*
)和非常数指针(T*
)。常量指针指向的值是不可修改的,而非常数指针指向的值是可以修改的。函数参数可以是常量指针或非常数指针。
使用常量指针作为参数调用非常数函数的优势在于:
const T*
T*
当函数需要读取但不修改传入的数据时,使用常量指针作为参数是合适的。例如:
void printValue(const int* ptr) {
std::cout << *ptr << std::endl;
}
如果尝试通过常量指针修改数据,编译器会报错。例如:
void modifyValue(int* ptr) {
*ptr = 10;
}
int main() {
int value = 5;
const int* constPtr = &value;
modifyValue(constPtr); // 错误:不能将常量指针转换为非常数指针
return 0;
}
常量指针保证指向的数据不可修改,而非常数函数可能会尝试修改传入的指针所指向的数据。
void modifyValue(const int* ptr) {
// *ptr = 10; // 错误:不能修改常量指针指向的数据
}
void modifyValue(int* ptr) {
*ptr = 10;
}
int main() {
int value = 5;
int* nonConstPtr = &value;
modifyValue(nonConstPtr); // 正确
return 0;
}
#include <iostream>
void printValue(const int* ptr) {
std::cout << "Value: " << *ptr << std::endl;
}
void modifyValue(int* ptr) {
*ptr = 10;
}
int main() {
int value = 5;
const int* constPtr = &value;
printValue(constPtr); // 正确:打印值
// modifyValue(constPtr); // 错误:不能将常量指针转换为非常数指针
int* nonConstPtr = &value;
modifyValue(nonConstPtr); // 正确:修改值
printValue(nonConstPtr); // 打印修改后的值
return 0;
}
领取专属 10元无门槛券
手把手带您无忧上云