关于几个指针的问题

来源:互联网 发布:数据精灵破解版 编辑:程序博客网 时间:2024/05/13 11:33

 

       下面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)

这样函数的原型应该是implement3 了

 

 

 

 

原创粉丝点击