为什么第一种函数不返回值,第二种就可以 。 或者说第二种可以返回正确结果是什么原理

img

img

img

img

第一种情况,pan()函数传的是数组p元素的值(即字符串指针),在pan()函数里对局部变量p1p2交换,不会影响main()函数里数组p的元素值。
第二种情况,pan()函数传的是数组p的首地址,在pan()函数里对数组p里元素(字符串指针)交换,就是对main()函数里数组p的操作。

应该是因为你第一种方法修改的是形参的值,形参的值并没有传入到实参中;第二种是数组操作,数组是可以直接在函数内修改值的
你可以指针这一块再看一下

第一种要想成功交换你得传地址进去,在你的程序里面就要把函数的参数类型设置成指向指针的指针

#include <stdio.h>
#include <string.h>
int main()
{
    void pan(char **p1, char **p2);
    char *p[3] = {"This is word", "this is word", "Chis Is word"};
    pan(&p[0], &p[1]);
    pan(&p[0], &p[2]);
    pan(&p[1], &p[2]);
    for (int i = 0; i < 3; i++)
    {
        printf("%s\n", p[i]);
    }
}
void pan(char** p1, char** p2)
{
    int a;
    char* b;
    a = strcmp(*p1, *p2);
    if (a > 0)
    {
        b = *p1;
        *p1 = *p2;
        *p2 = b;
    }
}

img