首页 > 解决方案 > 为什么这个交换功能不起作用?(在 C 中交换字符串)

问题描述

我正在尝试交换字符串数组中的 2 个条目,但我的swap函数在调用时不会交换。

swap(char*, char*);

int main() {
    char *ptsr[2] = { "x", "y" };
    swap(ptsr[0], ptsr[1]);
}

swap(char *t1, char *t2) {
    char *t;
    t = t1;
    t1 = t2;
    t2 = t;
}

有人可以识别并解释我的错误吗?

标签: cpointerspass-by-referenceswappass-by-value

解决方案


问题中的函数仅交换其参数的值。参数是数组元素的副本,因此该swap函数无效。

要交换数组中的指针,您必须传递它们的地址并更改交换函数的原型:

#include <stdio.h>

void swap(char **t1, char **t2) {
    char *t;
    t = *t1;
    *t1 = *t2;
    *t2 = t;
}

int main() {
    char *ptsr[2] = { "x", "y" };

    swap(&ptsr[0], &ptsr[1]);

    printf("pstr: { \"%s\", \"%s\" }\n", pstr[0], pstr[1]);
    return 0;
}

推荐阅读