【发布时间】:2014-02-11 23:08:09
【问题描述】:
#include <iostream>
using namespace std;
int take(int &takevalue, int &doubletake, int *pointer);
int main()
{
int chaka;
int sheppa;
int *lostlove;
take(chaka, sheppa, lostlove);
cout << lostlove;
}
int take(int &takevalue, int &doubletake, int *pointer)
{
pointer = &takevalue;
return *pointer;
}
上面的代码可以正常工作,但是指针的值为0。所以,我尝试在非本地进行,其中表示的数据将来自堆并在程序结束时自动删除:
#include <iostream>
using namespace std;
static int *pointer = 0;
int take(int &takevalue, int &doubletake, int *pointers);
int main()
{
int chaka;
int sheppa;
take(chaka, sheppa, pointer);
cout << pointer;
}
int take(int &takevalue, int &doubletake, int *pointers)
{
pointer = &takevalue;
return *pointer;
}
但是,“指针”的值仍然是 0,即使在分配了 takevalue 的地址之后。使用调用堆栈时,takevalue不应该有地址吗?为什么指针总是0?
【问题讨论】:
-
您的代码无法编译(
pointers和pointer)。您应该复制您的实际代码。 BTW,答案是指针是按值传递的。 -
@EdS。问题中的两个代码示例都可以编译。有一个参数
pointers,但这并不意味着全局变量pointer停止存在。 -
@EdS。 Pointers 是参数,但是静态传递的 int 是指针。区别没有任何意义。都为我编译。参数名称在调用时不需要匹配参数。
-
@hvd:我什至没有看到那个声明,我的错。
-
@AndyHarglesis:我指的不是这个。我指出了
take中使用的pointer,但没有看到它是静态声明的。
标签: c++ pointers static heap-memory callstack