解引用作为形参交换会改变实参值吗
时间: 2024-12-21 22:23:40 浏览: 12
在 C++ 或其他类似语言中,解引用作为函数参数传递并不会直接改变原实参的值。当将指针作为函数参数,并通过解引用操作访问指针的内容时,实际上是修改了指针所指向的数据,但这并不意味着改变了原始指针本身。
例如,考虑下面的代码片段:
```cpp
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
int* ptrA = &x, *ptrB = &y;
swap(ptrA, ptrB); // 通过解引用交换x和y的值
cout << "x: " << x << ", y: " << y; // 输出 x: 10, y: 5,可以看到x和y已经互换
return 0;
}
```
在这个例子中,`swap` 函数通过解引用改变了 `ptrA` 和 `ptrB` 指向的 `x` 和 `y` 的值,但函数内部的 `a` 和 `b` 变量只是临时复制了它们所指内容,不会影响到外部的 `ptrA` 和 `ptrB`。因此,`swap` 函数结束后,实参 `ptrA` 和 `ptrB` 仍保持原指向不变。
相关问题
JAVA使用形参交换两个数并反应到实参上
在 Java 中,我们可以创建一个静态方法来利用传入的形参间接实现两个变量的值交换,而无需直接修改实参的值,因为 Java 的函数参数传递是按值传递的。这里是一个示例:
```java
public class Main {
public static void swap(int a, int b) {
// 创建临时变量存储其中一个数值
int temp = a;
// 将另一个数值赋给第一个参数
a = b;
// 再将临时变量的值赋予第二个参数
b = temp;
}
public static void main(String[] args) {
int num1 = 5;
int num2 = 10;
System.out.println("Before swapping: num1 = " + num1 + ", num2 = " + num2);
// 调用swap方法来交换num1和num2的值
swap(num1, num2);
System.out.println("After swapping: num1 = " + num1 + ", num2 = " + num2);
}
}
```
在这个例子中,`swap` 方法通过形参 `a` 和 `b` 实现了值的交换,主函数 `main` 中的 `num1` 和 `num2` 的值也被相应地改变了。然而,`swap` 方法并未改变原始方法参数的值,而是改变了它们引用的对象。
改变形参的同时怎么改变形参
改变形参的同时改变实参的值是不可行的。在引用\[1\]中的错误算法代码中,swap函数的形参是p1和p2,而不是指针。因此,对形参p1和p2的值进行交换并不会影响实参x和y的值。所以,在输出结果中,x和y的值没有发生变化。
然而,在引用\[2\]中的正确算法代码中,swap函数的形参是指针int* p1和int* p2。通过使用指针,我们可以通过改变指针所指向的地址的值来改变实参的值。在swap函数中,我们使用了解引用操作符*来获取指针所指向地址的值,并进行交换。因此,在输出结果中,x和y的值会发生交换。
总结来说,如果想要改变形参的同时改变实参的值,可以使用指针作为形参,并通过解引用操作符*来改变指针所指向地址的值。
#### 引用[.reference_title]
- *1* *2* [不要企图通过改变形参的值而使实参的值改变 ← C++语言](https://blog.csdn.net/hnjzsyjyj/article/details/124937686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [java方法改变形参后得到实参值是否改变](https://blog.csdn.net/weixin_39623271/article/details/114967841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文