#include <stdio.h>
#include <stdlib.h>
int f(int *ptr)
{
ptr=(int *)malloc(sizeof(int));
*ptr=999;
return 0;
}
int main()
{
int *p,k=5;
p=&k;
f(p);
printf("%d",*p);//5
}
解决这个问题,有两种:
(一)利用函数返回值方法
#include <stdio.h>
#include <stdlib.h>
int *f()
{
int *ptr=(int*)malloc(sizeof(int));
*ptr=999;
return ptr;
}
int main()
{
int *p=f();
printf("%d",*p);//999
free(p);
}
(二)利用指向指针类型的指针
#include <stdio.h>
#include <stdlib.h>
void f(int **ptr)
{
*ptr=(int *)malloc(sizeof(int));
**ptr=999;
}
int main()
{
int *p=NULL;
f(&p);
printf("%d",*p);//999
free(p);//避免内存泄漏
}
摘自《C语言点滴》215页