c语言 p++指针 地址问题

void f()
{
*p = (double *) malloc (10*sizeof( double));
...
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是

这是个选择题 答案 是
double **p
我不直到原因

你这个函数应该是这样用:
void f( double** p )
{
*p = (double *) malloc (10*sizeof( double));
...
}
main()
{
double* a;
f(&a);
}

调用函数时,实际上是将参数拷贝了一份传入函数中。在外面先定义一个指针a, 如果直接将a传入函数f,那么实际上是拷贝了一个a传给了f,此时f中对a赋值,并不会影响到函数外面的a。所以这里要取a的地址传给f,即指向指针a的指针p,p是拷贝的,但是*p也就是p指向的内容就是函数外面的a,所以对*p赋值就能传到函数外面。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-08
p是指向指针的指针,p指向的那个指针设为q的话,q=*p,q也就是指向申请内存的那个指针。
如果形参是*p,函数返回后*p也就释放掉了,无法传递给主函数。
第2个回答  2012-05-08
char *a=(char^)malloc(sizeof(char));

(char *)malloc(sizeof(char)*10);二维数组

char **a
第3个回答  2012-05-08
malloc函数返回的是一个地址,此时*p等于这个地址,即*p是一个指向地址的指针变量,因此,p应定义为**p。再由 (double *) 可得出,p为 double **p。
相似回答