Arrays 如何在不使用其他数组的情况下交换C中指针字符串数组中的两个字符串?

Arrays 如何在不使用其他数组的情况下交换C中指针字符串数组中的两个字符串?,arrays,c,string,pointers,swap,Arrays,C,String,Pointers,Swap,如果我想交换红蚂蚁和白蚂蚁,如何交换两个字符串? 有人能帮我在不使用其他数组的情况下编写代码吗?据我所知,char*是指向地址记录的指针。 所以如果你定义char*temp;并使用此变量存储指向ants[0]的指针。从技术上讲,您没有创建其他数组来创建新订单 int main(){ char* ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,&q

如果我想交换红蚂蚁和白蚂蚁,如何交换两个字符串?
有人能帮我在不使用其他数组的情况下编写代码吗?

据我所知,char*是指向地址记录的指针。 所以如果你定义char*temp;并使用此变量存储指向ants[0]的指针。从技术上讲,您没有创建其他数组来创建新订单

int main(){

char* ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};

.... }

位置交换…

用于蚂蚁类型的字符串是字符串文本,在除不一致编译器外的所有编译器上都是只读不可变的。字符串文字具有长度设置为包含字符和'\0'nul终止字符的字符类型数组。字符串文本的标准部分是

您不能更改字符串文字的内容,但可以更改哪个指针指向哪个字符串文字。就您而言,您有:

char *temp;

temp=ants[0];
ants[0]=ants[4];
ants[4]=temp;
它具有指向char的指针的类型数组。所以你有一个字符指针数组。数组中的每个指针都保存ants中一个字符串的地址。要更改ants中字符串的顺序,必须交换数组中指针持有的地址

交换红蚂蚁和蓝蚂蚁的一个简单例子是:

    char *ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
如果要编写交换函数来交换指针,则不能将指针作为参数传递,例如,不能编写:

$ ./bin/swap_ants
blue ant
red ant
green ant
yellow ant
white ant
然后在函数中交换a和b。为什么?指针a和b是实际指针的副本。它们是交换函数的局部变量。因此,您在函数中对它们所做的任何操作都不会在main中看到

您可以提供指针的地址作为参数,然后在这两个地址交换指针,更改将在main中看到。通过传递原始指针的实际地址,对原始地址处的值进行任何更改,并返回main。因此,两个指针的交换函数可以写成:

swap (char *a, char *b)
现在如果你想交换红色和蓝色的蚂蚁,你可以简单地调用swaptr函数传递每个指针的地址,例如

/** swap pointers, changing pointer at address */
void swapptr (char **a, char **b)
{
    char *t = *a;           /* pointer at a's address saved in t */
         *a = *b;           /* assign pointer from b to a */
         *b = t;            /* assign temp pointer t to b */
}
相同输出

注意:您必须注意类型。ants+0和ants+1是指向字符串文本的指针,它们是指向字符数组的指针。但是在访问时,C中类型的数组被转换为指向第一个元素的指针。因此,每个and都是指向每个and中第一个字符的指针。因此,每个元素都以char**类型开头。这就是为什么你可以传递蚂蚁+0,蚂蚁+1来交换第一个和第二个红色和蓝色的蚂蚁


仔细检查一下,如果您还有其他问题,请告诉我。

交换任何其他两个值的方法相同。使用临时变量保存其中一个值,用另一个值指定该值,然后用temporary.temp=x指定另一个值;x=y;y=温度;提示:与可能计算错误的固定长度数组不同,使用以NULL结尾的数组,如char*ants[]={red,…,NULL}@tadman此数组是作为家庭作业提供的,因此我可以更改任何内容字符串文字是只读的,因此无法交换内容。你所能做的就是交换指针。非常感谢!!对于你的时间和努力,它帮助了很多。非常欢迎你。祝你的编码好运!
/** swap pointers, changing pointer at address */
void swapptr (char **a, char **b)
{
    char *t = *a;           /* pointer at a's address saved in t */
         *a = *b;           /* assign pointer from b to a */
         *b = t;            /* assign temp pointer t to b */
}
#include <stdio.h>

/** swap pointers, changing pointer at address */
void swapptr (char **a, char **b)
{
    char *t = *a;           /* pointer at a's address saved in t */
         *a = *b;           /* assign pointer from b to a */
         *b = t;            /* assign temp pointer t to b */
}

int main(){

    char *ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
    int n = sizeof ants / sizeof *ants;         /* number of ants */
    
    swapptr (ants, ants + 1);
    
    for (int i = 0; i < n; i++)                 /* output swapped ants */
        puts (ants[i]);
}