C++ C++;:初始化指向int的指针
以下是我在Visual Studio 2010上运行的示例代码:C++ C++;:初始化指向int的指针,c++,visual-studio-2010,C++,Visual Studio 2010,以下是我在Visual Studio 2010上运行的示例代码: #include <iostream> int main() { int **p(NULL); } #包括 int main() { int**p(空); } 我得到这个错误:error C2059:syntax error:'constant' 但是如果我改变int**p(NULL)到int**p=NULL上面的代码编译得很好 在GCC(版本:4.4.2)上检查了这一点,两者都可以正常工作。这里缺少什么
#include <iostream>
int main()
{
int **p(NULL);
}
#包括
int main()
{
int**p(空);
}
我得到这个错误:error C2059:syntax error:'constant'
但是如果我改变int**p(NULL)代码>到int**p=NULL代码>上面的代码编译得很好
在GCC(版本:4.4.2)上检查了这一点,两者都可以正常工作。这里缺少什么?您会得到一个语法错误:显然没有定义NULL。您应该包括cstdlib。这可能是编译器本身的一个bug,也可能是您做了一些事情并询问了其他问题
MSVC10支持C++11中的一些功能,例如:
int **p1 = nullptr;
int **p2{}; //initialized to nullptr!
你可以试试这些。两者都很好。VC++编译器似乎对指针到指针的初始化感到困惑
例如,这是可行的
int (**p)(NULL);
这些没有
int *i;
int **p(&i);
int **o(NULL);
但这是可行的
int (**p)(&i);
typedef int* intp;
intp *o(NULL);
等等。。。模式是只要存在两个**,初始化就会失败!我猜是虫子!来自MSVC团队的人可能能够确认看起来像VisualStudio缺陷,如果我用C++编译@并运行下面的代码
,它就可以工作了。
int main()
{
int **p(NULL);
return 0;
}
同样适用于使用g++编译器。可能您的编译器不支持。似乎是编译器中的一个bug。有趣!注意int*p(0)代码>有效,而int**p(0)代码>没有。请注意,如果定义typedef int*PINT代码>然后写入PINT*p(空)代码>它也可以正常工作<代码>整数**p(空)代码>肯定也可以工作。事实上它并不有趣。那完全不同。。关注这个问题,伙计:)@纳瓦兹:除了我所做的以外,我没有问其他任何问题:)@omggs:在这种情况下,它肯定是编译器中的一个bug。:-)