二维指针是指向一维指针的地址。当你的一维指针的值修改了,但是二维指针的值并没有改变,对吧。因为指针就是指向地址的,你并没有对其进行修改,而是改写了一维指针值。p++执行后,p的地址由p向下移了一位,但是原值并没有改变。
int** malloc2d(int row, int col)
{
int** ret = NULL;
if( (row > 0) && (col > 0) )
{
int* p = NULL;
ret = (int**)malloc(row * sizeof(int*));
p = (int*)malloc(row * col * sizeof(int));
if( (ret != NULL) && (p != NULL) )
{
int i = 0;
for(i=0; i<row; i++)
{
ret[i] = p + i * col;
}
}
else
{
free(ret);
free(p);
ret = NULL;
}
}
return ret;
}
两篇二维数组、二维指针文章如下
https://blog.youkuaiyun.com/iu_81/article/details/1782642
https://blog.youkuaiyun.com/qq_30339595/article/details/84843558