关于指针参数的问题
void Func(char *p){
p = (char *)malloc(10*sizeof(char));
memset(p,0,10*sizeof(char));
}
int main()
{
char *p = NULL;
Func(p);
if(p == NULL)
{
printf("Error!\n");
return(-1);
}
strcpy(p,"hello!");
printf("%s\n",p);
return (0);
}
看到一本C语言的参考书上说,这个Func函数不能把malloc生成的内存返回给主函数的指针p,是因为Func函数采用的是传值的方式进行参数的传递的。因此,在题中传给Func函数的参数p,是主函数中p的一个拷贝,假设是p'。生成的内存也是赋给这个拷贝p'的,而一旦推出Func函数,这个拷贝p'便被编译器收回了,所以主函数中的p并没有得到malloc生成内存的首地址。但是下面的情况为什么可以呢:
typedef struct node
{
void *pnode;
void *phandle;
}node_t;
int Func(void *pinit)
{
node_t *pInst = (node_t *)pinit;
pInst->pnode = malloc(10*sizeof(char));
if(NULL == pInst->pnode)
{
printf("Error: NULL == pInst->pnode!\n");
return (-1);
}
memset(pInst->pnode,0,10*sizeof(char));
return (0);
}
int main()
{
int ret =0;
node_t *pInst = NULL;
pInst = (node_t *)malloc(sizeof(node_t));
if(NULL == pInst)
{
printf("Error:NULL == pInst!\n");
return (-1);
}
ret = Func(pInst);
if(ret < 0)
{
printf("Error : ret < 0!\n");
return (-1);
}
if(pInst->pnode == NULL)
{
printf("Error: In main,pInst->pnode == NULL!\n");
return (-1);
}
strcpy(pInst->pnode,"Hello!\n");
printf("%s\n",pInst->pnode);
return(0);
}
照书上说的,传给Func函数的也应该是一个拷贝啊,为什么在里面malloc生成的内存,main函数中可以使用呢!
问了不少人了,都没得到什么有价值的回答。希望论坛里的大家能给小弟指点迷津,不甚感激啊!