2 wynne1005 Wynne1005 于 2016.03.11 09:59 提问

双重指针定义动态二维数组 5C

指针符号太多了 求解释每个指针符号
问:二重指针 太多 求解释一下各个

p=(int **)malloc(sizeof(int *)*line);
if(NULL==p)
{
return;
}

for(i=0;i<line;i++)
{
    *(p+i)=(int *)malloc(sizeof(int)*row);
    if(NULL==*(p+i))
    {
        return;
    }
}

2个回答

qq_27564553
qq_27564553   2016.03.11 14:09

首先我来看malloc做了什么,申请了一组空间,存放int型指针,返回这组空间的首地址,所以定义int **p,定义一个指向指针的指针。首地址放到p中,而p就指向了这组数,而这组数本身是指针,即定义了一个指向指针的指针了。
你可以这么考虑现在假定有一个类型是int *,申请了一组空间放int *,返回的是指向这组数的地址,是不是都是int **p了;类比int *p = (int *)malloc(sizeof(int)*num);

qq_27564553
qq_27564553   2016.03.11 14:20

画个图看看,p指向一块空间(竖着画),空间里面都是放的指针,然后它们又分别指向一块空间。然后你就理解为什么会取那些line啊,row了,就是二维数组啊。(ps:就不吐槽了row和column还是对应的了)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!