指针交换
利用指针交换两个数的值错误范例正确的代码
利用指针交换两个数的值
错误范例
#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
;
}
}
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
);
}
由图可知,交换成功。