交换函数的字符串交换

Sud*_*pta 2 c string pointers

我已经编写了交换字符串的代码,但我无法交换.问题是什么,如何通过使用函数来解决swap

#include <stdio.h>

void swap( char*,char*);
int main()
{
    char *ptr[2] = {"hello", "morning"};
    swap(ptr[0], ptr[1]);
    printf("%s %s", ptr[0], ptr[1]);
    return 0;
}

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

    t1 = t2;
    t2 = t;
}
Run Code Online (Sandbox Code Playgroud)

我也试图通过(&ptr[0], &ptr[1]),但这里显示了一个segmentation fault.此外,我做了一个字符,*p1 = ptr[0], char *p1 = ptr[1]和然后传递&p1,并&p2swap,但我仍然得到分割故障.

pb2*_*b2q 7

C函数参数是按值传递的.您将地址的值传递给您的swap函数,并期望这些值(地址)发生变化.但只有函数中地址的副本会swap发生变化.

要更改实际传入的地址,您需要一个aditional级别的引用:

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

    t = *t1;
    *t1= *t2;
    *t2 = t;
}
Run Code Online (Sandbox Code Playgroud)

并称之为swap:swap(&ptr[0], &ptr[1]);


Man*_*Way 5

您需要将指针传递给char数组的指针才能切换它们.通过这样做,您可以交换这些指针的值.(哪些是实际的数组.)

#include<stdio.h>
void swap( char**,char**);
int main()
{
        char *ptr[2] = {"hello","mornig"};
        swap(&ptr[0], &ptr[1]);
        printf("%s %s",ptr[0], ptr[1]);
        return 0;
}

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

        *t1 = *t2;
        *t2 =t;
}
Run Code Online (Sandbox Code Playgroud)