c++二义性有关问题

c++二义性问题
#include <iostream>
using namespace std;
void f(int i)
{
cout << "f(int i)" << endl;
}

void f(char* a)
{
cout << "f(char* a)" << endl;
}

int main()
{
f(NULL);

return 0;
}

为什么会提示说具有二义性呢?
我觉得,如果认为NULL是指针,那就是调用char*参数的啊,如果认为NULL是0,那么就调用int参数的函数啊,这有什么问题呢。
------解决思路----------------------
因为 #define NULL 0所以有这个问题
这就是c++为什么增加nullptr的缘故