cc++ 学习笔记 利用指针交换值

    技术2024-11-01  25

    指针交换

    利用指针交换两个数的值错误范例正确的代码

    利用指针交换两个数的值

    错误范例

    #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); }

    由图可知,交换成功。

    Processed: 0.015, SQL: 9