C语言中二级指针修改数组问题。

数组相当于一级指针,我写了一个二级指针被调用。
结果它总是宕机,求指导,谢谢。图片

这段程序编译会报错吧:
cannot convert parameter 1 from 'char (*)[100]' to 'char **'

可以这样 试试看
#include
#include
#include

int getMemBuf(char*& p2)
{
char* tmp = NULL;
tmp = (char*)malloc(100);
strcpy(tmp, "aaabbbccc");

p2 = tmp;
return 0;

}

void main()
{
int i = 0;
char* buf;
getMemBuf(buf);

printf("%s\n", buf);

free (buf);
system("pause");

}

数组确实是相当于一级指针,但是是常量指针,其值不能被修改。
任何试图修改数组名的操作,会引起程序严重异常。

数组名仅仅是“相当”于指针,而并非真的是指针,只是个常量(一个值为数组首元素地址的常量),所以不能进行++或者--运算。
而常量更是无法取地址的, 你使用的给数组名取地址它代表了数组本身,可不是简单的二级指针