int main()
{
int *d=0;
printf("%d\n",*d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
>cc legal.c
> ./a.out
0
Run Code Online (Sandbox Code Playgroud)
如果我更改语句int *d=0;,int *d=1;
我会看到错误.
cc: "legal.c", line 6: error 1522: Cannot initialize a pointer with an integer constant other than zero.
Run Code Online (Sandbox Code Playgroud)
很明显,它只允许零.我想知道当我们这样做时,内存中发生了什么,这int *d=0使得它成为有效的语法.
我只是出于好奇而问这个!
我很惊讶您在运行代码时没有得到SEGFAULT.将*d在printf语句被取消引用指针.但是,要回答您的问题,C++允许将0作为任何对象的默认初始值设定项,这就是为什么它可以用于将指针初始化为null(0和null相同)的原因.值为1时,您要求编译器将整数转换为指针,这需要显式转换.