void swap(int* a,int* b) { int *p; *p=*a; *a=*b; *b=*p; }请指出这段代码的问题
时间: 2024-06-18 18:03:21 浏览: 109
这段代码的问题在于,它没有正确地交换a和b指向的变量的值。更具体地说,代码中的p指针没有被初始化,所以它所指向的内存地址是未知的。在第二行中,代码将a指向的值赋给了*p,但是*p所指向的内存地址是未知的,所以这个操作可能会导致未定义行为。正确的做法是需要先将p指向a指向的变量,然后再进行值的交换。
下面是修改后的代码:
```
void swap(int* a, int* b) {
int p;
p = *a;
*a = *b;
*b = p;
}
```
相关问题
函数的功能是交换变量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 temp = *a; *a = *b; *b = temp; }
这段代码定义了一个名为 swap 的函数,该函数接受两个指向整型变量的指针作为参数。函数体内,首先定义了一个名为 temp 的整型变量,其值等于指针 a 所指向的变量的值。然后将指针 a 所指向的变量的值更新为指针 b 所指向的变量的值,再将指针 b 所指向的变量的值更新为 temp 的值。这样,两个指针所指向的变量的值就完成了交换。
阅读全文