在指针变量中存储除零之外的整数常量

Vij*_*jay 2 c c++

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使得它成为有效的语法.

我只是出于好奇而问这个!

Mic*_*yan 5

我很惊讶您在运行代码时没有得到SEGFAULT.将*d在printf语句被取消引用指针.但是,要回答您的问题,C++允许将0作为任何对象的默认初始值设定项,这就是为什么它可以用于将指针初始化为null(0和null相同)的原因.值为1时,您要求编译器将整数转换为指针,这需要显式转换.