請考慮下面的程序:空指針的函數參數
#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 *。 – Ely
你可能打算通過'a'的地址來達到同樣的效果:'f(&a);' –
@meet雖然EdHeals的評論並不完美,但基本上他是對的,如果你不明白這是什麼,你不需要任何指針 – deviantfan