函数调用后输出不正确

时间:2012-11-09 09:51:41

标签: c++ pointers output function-call

我希望结果是未定义的或者是什么,但输出是“10”,为什么?

我想在调用函数后内存会被破坏。

#include <iostream>
void f(int *p)
{
    int l = 20;
    int *k = &l;
    p = k;
}
int main()
{
    int i = 10;
    int *j = &i;
    f(j);
    std::cout << *j;
    return 0;
}

5 个答案:

答案 0 :(得分:5)

结果未定义。您通过值传递指针j ,因此您可以在函数内修改它的副本。原始j保持不变,因此结果仍为10

答案 1 :(得分:1)

该程序格式正确,因为l之外的<{1}} 在<{1}}之外访问,因为指针f()j中未更改(指针main()的副本传递给j)。

答案 2 :(得分:1)

让我们分解您的代码。

您首先将10分配给i。然后将j指向i的地址。

在f中,您将p的值设置为k,而不是指向的值。作为f()的参数传递时,将复制p值(地址值)。

因此,您永远不会修改j指向的值,只需修改jf()的本地值,这就是它保持等于10的原因。< / p>

答案 3 :(得分:1)

代码完全没有问题。 f的参数未通过引用传递,因此f无法修改j,因此在j之后i仍然指向f退出。

答案 4 :(得分:0)

您对通过引用传递/传递值感到困惑。当您传递指针时,指针本身就是一个数字,您传递给指向一块内存的f()函数;修改f()中的* p变量(而不是*p指向的内存块)将对main()函数没有影响。

指针只是一个包含内存地址的变量。它本身就是通过价值传递的;只有指针指向的变量才能通过引用传递。