- 指针作为参数
- 函数实现:指针作为参数,函数内部可以通过指针修改所指向对象的值。
- 代码示例:
#include <iostream>
void modifyValue(int* ptr) {
if (ptr) {
*ptr = 10;
}
}
int main() {
int num = 5;
modifyValue(&num);
std::cout << "The value of num after modification: " << num << std::endl;
return 0;
}
- 调用方式:在调用函数时,传递对象的地址。这种方式适用于需要修改传入对象值的场景。
- 常量指针作为参数
- 函数实现:常量指针作为参数,指针本身可以改变指向,但所指向的内容不能被修改。
- 代码示例:
#include <iostream>
void printValue(const int* ptr) {
if (ptr) {
std::cout << "The value is: " << *ptr << std::endl;
}
}
int main() {
int num1 = 5;
int num2 = 10;
const int* constPtr = &num1;
printValue(constPtr);
constPtr = &num2; // 合法,指针可以改变指向
// *constPtr = 20; // 非法,不能修改所指向的值
printValue(constPtr);
return 0;
}
- 调用方式:同样传递对象的地址。当函数不需要修改传入对象的值,只是读取其值时,使用常量指针作为参数可以起到保护数据不被修改的作用。
- 结合实现不同功能需求
- 需求:函数既需要修改传入对象的值,又要保证某些数据不被修改。
- 代码示例:
#include <iostream>
void complexModify(int* modifiablePtr, const int* nonModifiablePtr) {
if (modifiablePtr) {
*modifiablePtr = *nonModifiablePtr;
}
}
int main() {
int numToModify = 5;
int numToCopy = 10;
complexModify(&numToModify, &numToCopy);
std::cout << "The modified value: " << numToModify << std::endl;
return 0;
}
- 在这个示例中,
modifiablePtr
用于修改值,nonModifiablePtr
保证其指向的数据不被修改,从而满足既修改传入对象的值,又保证某些数据不被修改的功能需求。