我希望结果是未定义的或者是什么,但输出是“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;
}
答案 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
指向的值,只需修改j
中f()
的本地值,这就是它保持等于10
的原因。< / p>
答案 3 :(得分:1)
代码完全没有问题。 f
的参数未通过引用传递,因此f
无法修改j
,因此在j
之后i
仍然指向f
退出。
答案 4 :(得分:0)
您对通过引用传递/传递值感到困惑。当您传递指针时,指针本身就是一个数字,您传递给指向一块内存的f()
函数;修改f()
中的* p变量(而不是*p
指向的内存块)将对main()
函数没有影响。
指针只是一个包含内存地址的变量。它本身就是通过价值传递的;只有指针指向的变量才能通过引用传递。