void swap(int *x,int *y) {int *p; *p=*x; *x=*y; *y=*p;} 这个代码存在什么问题?
时间: 2023-12-04 12:39:36 浏览: 88
这个代码存在问题,因为指针p没有被初始化,所以在执行*p=*x时会出现未定义的行为。应该先将p指向一个合法的内存地址,例如可以使用以下代码进行改进:
```c
void swap(int *x, int *y) {
int temp;
int *p = &temp;
*p = *x;
*x = *y;
*y = *p;
}
```
相关问题
void swap(int *x,int y) { int temp ; temp=*x ; *x=y ; y=temp ; }解释这个函数
这个函数使用指针来实现变量值的交换,函数的参数包括一个指向整型变量的指针 x 和一个整型变量 y。具体来说,函数中的操作如下:
1. 首先,将 x 指向的变量的值存储到临时变量 temp 中。
```
int temp;
temp = *x;
```
2. 然后,将 y 的值赋给 x 指向的变量。
```
*x = y;
```
3. 最后,将 temp 的值赋给 y,即将 x 指向的变量的值赋给 y。
```
y = temp;
```
这样,在调用 swap 函数时,可以将需要交换的两个变量的地址和值作为参数传递给 swap 函数,从而实现变量值的交换。具体代码如下:
```
int a = 1, b = 2;
swap(&a, b);
```
需要注意的是,函数中的第二个参数 y 是按值传递的,即在函数中修改 y 的值不会影响原变量的值。如果想要在函数中修改原变量的值,需要将其地址作为参数传递给函数。因此,函数的第二个参数应该是 int *y,而不是 int y。
void swap( int* p1,int* p2 )
### 回答1:
您好!以下是用中文回答您的问题:
这是一个交换两个整数变量值的函数,参数分别是两个整型指针。
函数代码如下:
void swap(int* p1, int* p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
函数使用指针作为参数,因为它需要修改变量的值。在函数内部,它将变量p1所指向的值存储在临时变量temp中,然后将p2所指向的值复制给p1所指向的值,最后将temp的值复制给p2所指向的值,从而完成了两个变量值的交换。
希望这能够帮到您!
### 回答2:
函数声明中的void swap( int* p1,int* p2 )表示定义了一个名为swap的函数,它需要两个int类型的指针p1和p2作为参数。这意味着,在使用这个swap函数之前,我们需要用正确的参数来调用它,这样才能正确地执行交换操作。
当我们在swap函数中使用这两个指针时,它实际上会交换它们所指向的值。对于指针p1和p2,swap函数首先通过使用临时变量将指针p1指向的值存储在临时变量temp中。然后,它将指针p2指向的值复制到指针p1指向的地址,即将p2指向的值赋值给p1指向的位置。最后,函数将在temp中存储的原始值复制到p2指向的地址,即将temp中的值赋值给p2指向的位置。
使用该函数可以轻松地实现对两个变量的交换操作,这对于排序和其他算法实现非常有用。我们可以将该函数用于任何需要交换两个变量的地方,只需将变量的地址传递给函数即可。
### 回答3:
void swap(int* p1, int* p2)是一个定义在C语言和C++中的函数,其功能是交换指针p1和p2所指向的两个整型变量的值。
首先,我们需要了解指针是什么。指针是一个变量,其存储的是内存地址。在C/C++中,我们可以用指针来访问内存中的数据,也可以通过指针来修改内存中的数据。
在swap函数中,p1和p2是两个指向整型变量的指针。通过*p1和*p2,我们可以访问和修改p1和p2所指向的变量的值。
在函数内部,我们首先定义一个中间变量temp来存储p1所指向的变量的值,然后将p1所指向的变量的值改为p2所指向的变量的值,最后将p2所指向的变量的值改为temp,即完成了两个变量的值的交换。
其中,符号*用于取出指针指向的地址中的值,指针变量与普通变量的区别在于它存储的是地址而不是值,因此要用*来获取它所指向的值;&符号用于获取变量的地址。
需要注意的是,调用swap函数时,传入的必须是两个整型变量的地址,而不能是变量本身。因此,我们使用&运算符来获取变量的地址,如下所示:
int a = 1, b = 2;
swap(&a, &b);
这样就可以将变量a和b的值交换了。
总之,void swap(int* p1, int* p2)是一个非常常用的函数。通过指针,我们可以在函数内部修改外部变量的值,从而实现各种功能。