为什么返回的值不是1.2.3.。我又给指针p赋值12.15.17,为什么输出的不是12.15.17

为什么返回的值不是1.2.3.。我又给指针p赋值12.15.17,为什么输出的不是12.15.17能详细的给我讲下吗,可以加下QQ吗,我是个新手

fanhui中定义的是局部变量a

在函数执行后 会被释放

再引用p其实是野指针。

你这个 不挂掉已经很好了。


fanhui可以这么写

int *fanhui()
{
    int *p = new int[3];
    p[0] = 1;
    p[1] =2;
    p[3]=3;
    
    return p;
    
}

或者 更简单的

int *fanhui()
{
    static int a[3] = {1,2,3};
    return a;
}追问

被释放了是a0.a1 ,a2的地址都不存在了吗

追答

是的
整个a 都被释放了
p成了野指针了。

追问

那不是返回了a0的地址吗,p存储着地址,那p1存储的不就是(p存储的地址加1)的吗,那p1不也是有指向的地址吗,我给p指针第二次赋值时,为什么只有p0的值,而其它值是随机的

追答

p=a0
当a上三个int都释放时
p0 p1 p2都可能被系统拿去用作其它用途了。
所以 p0 p1 p2的值 都是不一定的。
当你二次赋值的时候 在输出前 这段空间 也有可能被系统赋值。

至于为什么p0是对的 只能说你运气好吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-07
c语言里最难的就是指针了。我手机,图真心放大不了追问

能加下QQ吗,详细的给我解释下

还在吗

第2个回答  2016-11-07
返回函数有问题吧追问

我就是想问一下返回函数哪里出问题了,能加下QQ,详细的给我解释下吗