这个程序为什么出错?

#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;
}
阅读 2.1k
2 个回答

因为init分配的p,不是传递过去的指针,而是一个复制的p,所以main中的p没有被分配到内存,你需要传递指针的地址过去。

从某种意义上讲,c只有按值传递。因此想改变函数外部变量的值,需要使用指向这个变量的指针。所以就问题本身来说,你想在init函数里改变main里指针p的值,需要传递指向指针p的指针,即char **类型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进