内存分配和函数参数的问题

void getm(char p)
{
p =(char *) malloc(10);
}
这种内存分配的方式为什么不行,而用二级指针就可以,或者如下:
char *getm()
{
p=(char
)malloc(10);
return p;
}


主函数:
void main()
{
char *p = NULL;
getm(p);
strcpy(p,"hello");
printf("%s\n",p);
return 0;
}

 void getm(char *p)
{
        p =(char *) malloc(10);
}

这种方式之所以不行,是因为形参p和实参p并不是同一个指针(他们只是指向同一块内存而已)
你让形参p指向新malloc的地址并不会影响到你main函数里的实参p
只有传入一个二级指针或者一级指针的引用,或者你上面写的通过返回值接收才行

分配的是指针。你传入的参数就需要是指针才能赋值。类型才能匹配

malloc分配的是堆内存啊,直到被释放,分配的内存一直存在啊,为什么一级指针就不可以?