void swap(int* a, int* b) { int jh = *a; *a = *b; *b = jh; }为什么要这样做?
时间: 2023-08-11 12:04:24 浏览: 147
这段代码是一个用于交换两个整数值的函数。它使用了指针作为参数,通过指针来修改实际的变量值。
在C++中,函数的参数传递有两种方式:值传递和引用传递。值传递是将实际参数的值复制给形式参数,函数中对形式参数的修改不会影响实际参数。而引用传递则是将实际参数的引用传递给形式参数,函数中对形式参数的修改会影响实际参数。
在这个交换函数中,使用指针作为参数可以实现引用传递的效果。通过传递变量的地址给指针,我们可以直接修改变量的值,而不是通过复制值来实现交换。
具体来说,`int* a`和`int* b`是指向整数的指针,它们分别指向需要交换的两个整数变量。在函数内部,`int jh = *a`将指针a所指向的整数值保存到变量jh中。然后,`*a = *b`将指针b所指向的整数值赋给指针a所指向的变量,实现了两个整数值的交换。最后,`*b = jh`将保存在jh中的值赋给指针b所指向的变量,完成了交换过程。
总而言之,使用指针作为参数可以实现对变量的引用传递,通过对指针所指向的变量进行操作来实现交换。这样可以避免复制大量的数据,提高效率。
相关问题
函数的功能是交换变量a和b的值,且能返回交换的结果,正确的函数是()。 A. void swap(int *a, int *b) { int *p; *p=*a; *a=*b; *b=*p; } B. void swap(int a, int b) { int t; t=a; a=b; b=t; } C. void swap(int *a, int *b) { int *p; p=a; a=b; b=p; } D. void swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; }
正确的函数是D. void swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; }。
解析:
A选项中,定义了一个指针p,但并没有为它分配内存,在执行“*p=*a”时会出现未定义的行为,导致程序出错。
B选项中,参数a和b是按值传递的,函数中对它们的修改不会影响到函数外部的实参,因此无法实现交换变量的功能。
C选项中,定义了一个指针p,但在执行“p=a”时只是把指针p指向了a所指向的内存地址,而没有实现变量a和b的值的交换。
D选项中,定义了一个临时变量t,将a所指向的值赋给t,再将b所指向的值赋给a,最后将t的值赋给b,实现了变量a和b值的交换。同时,函数返回值为void,即没有返回值,符合题目要求。
因此,选项D是正确的函数。
void swap(int* a,int* b) { int *p; *p=*a; *a=*b; *b=*p; }请指出这段代码的问题
这段代码的问题在于,它没有正确地交换a和b指向的变量的值。更具体地说,代码中的p指针没有被初始化,所以它所指向的内存地址是未知的。在第二行中,代码将a指向的值赋给了*p,但是*p所指向的内存地址是未知的,所以这个操作可能会导致未定义行为。正确的做法是需要先将p指向a指向的变量,然后再进行值的交换。
下面是修改后的代码:
```
void swap(int* a, int* b) {
int p;
p = *a;
*a = *b;
*b = p;
}
```
阅读全文