我想看看能不能打印出a的数组的值来,出了那个交换的自定义函数之后在main函数里面打印b出来的还是乱码,在自定义函数里面打印却可以输出正常值

我想着通过给一个赋值之后的字符数组的地址交换给一个空的字符数组的地址,然后打印一下。看看能不能打印出a的数组的值来,但是实践了一下发现,出了那个交换的自定义函数之后在main函数里面打印b出来的还是乱码,在自定义函数里面打印却可以输出正常值,这是为什么呀?

#include<stdio.h>
#include<string.h>
void fun(char a[], char b[]);

int main()
{

    char a[80], b[100];
    gets_s(a);
    fun(a, b);
    printf("%s\n", b);
    return 0;
}
void fun(char a[], char b[])
{char* p;
    p = a;
    b = p;
    printf("%s\n", b);
}

img

这样交换是错误的,不能实现main函数中数组或指针变量的改变
首先main里是数组变量传递,函数不可能改变数组的地址
要交换数组内容,只能在函数中用strcpy来复制数组数据到中间变量来实现交换,比如

void fun(char a[], char b[])
{char p[100];
   strcpy(p,a);
   strcpy(a,b);
   strcpy(b,p);
    printf("%s\n", b);