c[]和*c的区别 为什么用*c就会崩溃

问题遇到的现象和发生背景

c[]正常运行 *c就崩溃

问题相关代码,请勿粘贴截图
#include <iostream>
using namespace std;
void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
char*temp={0};
char*a=(char*)m1;
char*b=(char*)m2;
char *c;
for(int i=0;i<size;i++){
    
     *c=*a;
     *a=*b;
     *b=*c;
    
    a++;
    b++;
} 

}


```c++
#include <iostream>
using namespace std;
void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
char*temp={0};
char*a=(char*)m1;
char*b=(char*)m2;
char c[0];//空指针不能赋值 先指向一片 
for(int i=0;i<size;i++){
    
     c[0]=*a;
     *a=*b;
     *b=c[0];
    
    a++;
    b++;
} 

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

出错的关键就是c未初始化,c是野指针,没有为c开辟空间,此时c指向一块,当使用*c去访问内容时,自然会报错。
一般来说,对未初始化的指针解引用是未定义行为,没人能保证是否有效,可以产生任何后果。你应该避免这样的行为。

char *c;
*c='a';

此处,既然用了i,你应该想想这里为什么要用char,因为内存的基本单位是字节,所以内存的操作都是以字节为单位进行寻址和操作。C语言中的char类型的大小刚好是一个字节,所以可以借助char,在字节的层面上来操作内存。

void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
    char *c1=(char*)m1;
    char *c2=(char*)m2;
    for(int i=0;i<size;i++){
        char t=c1[i];
        c1[i]=c2[i];
        c2[i]=t;
    }
}