【c++】指针的另一大用途:限制实参必须是变量
指针在编程中扮演了非常重要的角色,尤其在C和C++等语言中。当指针作为函数的参数时,它不仅可以传递变量的地址,实现数据的间接访问和修改,还可以用来在函数内部确保接收到的参数必须是一个可修改的变量(即非常量),这在某些情况下是非常有用的。
在C或C++中,如果你想确保传递给函数的参数必须是一个可修改的变量(即,不能是常量或字面量),你可以通过声明该参数为指针来实现这一点。因为字面量(如整数常量)和常量表达式不能直接作为指针的实参,因为它们没有地址可以传递。
下面是一个简单的示例,展示了如何使用指针参数来确保传递给函数的参数是一个可修改的变量:
#include <stdio.h>// 函数声明,参数为指向int的指针
void modifyValue(int *ptr) {
// 通过指针修改值
*ptr = 10;
}int main() {
int x = 5;
printf("Before: %d\n", x);// 传递x的地址给函数
modifyValue(&x);printf("After: %d\n", x);// 尝试传递一个常量或字面量将会导致编译错误
// modifyValue(5); // 错误:整数常量没有地址return 0;
}
在上面的代码中,modifyValue
函数接收一个指向int
的指针ptr
。这意味着它期望的实参是一个int
类型变量的地址。在main
函数中,我们通过&x
传递了变量x
的地址给modifyValue
函数,这样modifyValue
就能通过解引用指针*ptr
来修改x
的值。
如果尝试传递一个常量或字面量(如5
)给modifyValue
函数,编译器将会报错,因为常量和字面量没有地址,因此无法被取地址操作符&
所操作,也无法作为指针的实参。
这种方式在需要修改函数外部变量时特别有用,同时也确保了传递给函数的参数是可修改的,从而增强了代码的安全性和健壮性。