开发者社区 问答 正文

【关于C语言线性表参数的问题】

请问,p,&p, &p,这三个的区别是什么?
为什么我在开辟空间时,参数设置成p,后面的插入等操作就无法实现,而换成 &p之后,就可以实现了

展开
收起
a123456678 2016-03-20 11:27:51 2040 分享 版权
1 条回答
写回答
取消 提交回答
  • 你所指的就是常见的编程错误之一,返回指向栈内存的指针。
    void fun( int *p )
    {
    p = (int *)malloc(sizeof(int));
    }
    int main(void)
    {
    int *ps;
    fun(ps);
    printf("heap setn");//可以执行到此
    *p = 5;//Segmentation fault 发生段错误
    free(ps);
    return 0;
    }

    fun 函数的参数在栈中,当fun函数结束的时候,fun所持有的栈内存就会消失。p也会消失。在上例中,你实际上传人的是一个指针值,就和其他类型一样
    ,指针也有值,只不过指针的值是一个地址而已,所以你fun(ps)的时候,只是把ps的值(一个地址)copy到p,实际上,ps和p就不在同一个
    地方,当fun返回后,p消失了,你也就不知道它所申请的内存在哪里了,所以程序可以执行到printf,再往下执行,*p发生段段错误,因为你想要给
    未知的内存区域赋值。
    Int *p,这是声明p是指针变量,
    p 这样是要引用p所指向的内存,例如上例中p = 4;
    &p 就是取得指针本身的地址,不是指针指向的地址。

    2019-07-17 19:09:15
    赞同 展开评论
问答分类:
问答地址: