【发布时间】:2015-09-06 10:26:23
【问题描述】:
考虑以下程序:
#include <iostream>
void f(void* a)
{
std::cout<<"(void*)fun is called\n";
std::cout<<*(int*)a<<'\n';
}
int main()
{
int a=9;
void* b=(int*)&a;
f(b);
return 0;
}
如果我像这样更改函数调用语句:
f(&b);
它仍然可以正常编译并在运行时崩溃。为什么?是什么原因?我不应该得到编译时错误吗?因为调用函数的正确方法是 f(b)。正确的?另外,为什么允许将 NULL 传递给参数类型为 (void*) 的函数?
如果我遗漏了什么或理解不正确,请纠正我。
【问题讨论】:
-
指针的指针仍然是指针,所以它被接受为 void*。
-
你可能想通过
a的地址来达到同样的效果:f(&a); -
@meet 虽然 EdHeals cmets 不是很好,但基本上他是对的。如果您不明白这是做什么的,请不要这样做。你甚至不需要任何指针。
标签: c++ pointers parameter-passing void-pointers