#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
void init(int *p)
{
p=(int *)malloc(sizeof(int));
}
int main()
{
int *p;
init(p);
*p=4;
printf("%d",*p);
return 0;
}
#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
void init(int *p)
{
p=(int *)malloc(sizeof(int));
}
int main()
{
int *p;
init(p);
*p=4;
printf("%d",*p);
return 0;
}
从某种意义上讲,c只有按值传递。因此想改变函数外部变量的值,需要使用指向这个变量的指针。所以就问题本身来说,你想在init函数里改变main里指针p的值,需要传递指向指针p的指针,即char **类型。
因为init分配的p,不是传递过去的指针,而是一个复制的p,所以main中的p没有被分配到内存,你需要传递指针的地址过去。