指针交换
利用指针交换两个数的值
错误范例
#include <stdio.h>
#include <iostream>
using namespace std;
void change(int* m, int* n) {
int* temp;
if (*m < *n) {
temp = m;
m = n;
n = temp;
}
}
int main() {
int a, b;
int* p, * q;
scanf("%d %d", &a, &b);
p = &a;
q = &b;
change(p, q);
printf("%d %d\n", a, b);
}
从黑框控制台可以看出,并没有进行交换。
利用逐过程可知,该函数交换了m,n指针的指向,但是并没有改变p,q指针的指向。
void change(int* m, int* n) {
int* temp;
if (*m < *n) {
temp = m;
m = n;
n = temp;
}
}
正确的函数如下:
void change(int* m, int* n) {
int temp;
if (*m < *n) {
temp = *m;
*m = *n;
*n = temp;
}
利用 *m = a 和 *n = b ,交换 *m 和 *n 的值,来达到交换 a 与 b 的目的。
正确的代码
#include <stdio.h>
#include <iostream>
using namespace std;
void change(int* m, int* n) {
int temp;
if (*m < *n) {
temp = *m;
*m = *n;
*n = temp;
}
}
/*
void change(int* m, int* n) {
int* temp;
if (*m < *n) {
temp = m;
m = n;
n = temp;
}
}
*/
int main() {
int a, b;
int* p, * q;
scanf("%d %d", &a, &b);
p = &a;
q = &b;
change(p, q);
printf("%d %d\n", a, b);
}
由图可知,交换成功。