下面3个返回指针的函数实现,大家说哪几个是对的,哪几个是错的?为什么?哪个是不能完成要求的功能的?即返回malloc()申请的地址。
/*implement 1*/
void getmemory(int *ptr,int size)
{
ptr = (int *)malloc(sizeof(int)*size);
}
/*implement 2*/
int * getmemory(int size)
{
int *temp = (int *)malloc(sizeof(int)*size);
if(temp != NULL)
{
return temp;
}
return NULL;
}
/*implement 3*/
void getMemory(int **buf,int size)
{
*buf = (int *)malloc(sizeof(int)*size);
}
第一个是错的,第二三个是对的。
第一个是传值,这样不可能返回指针的地址;第二个是直接返回指针的地址;第三个是通过指向指针的指针来返回这个地址;
对于第一个,就好象swap(int a, int b)这里不能实现a,b互换一样,因为函数的参数在调用里是压入到堆栈,这里只是一个临时变量。
同样,对于:
int *ptr;
getmemory(ptr)
在getmemory()函数里,ptr只是一份调用int *ptr的拷贝,不可能通过他返回;
这时我们应该是:
getmemory(&ptr)
int *ptr;
getmemory(ptr)
在getmemory()函数里,ptr只是一份调用int *ptr的拷贝,不可能通过他返回;
这时我们应该是:
getmemory(&ptr)
这样函数的原型应该是implement3 了