int main()
{
int *d=0;
printf("%d\n",*d);
return 0;
}
这很好用。
>cc legal.c
> ./a.out
0
如果我将语句 int *d=0;
更改为 int *d=1;
我看到了错误。
cc: "legal.c", line 6: error 1522: Cannot initialize a pointer with an integer constant other than zero.
所以很明显它只允许零。我想知道当我们执行此 int *d=0
时内存内部发生了什么,这使它成为有效的语法。
我只是出于好奇才问这个问题!
最佳答案
令我惊讶的是,您在运行代码时没有遇到 SEGFAULT。 printf 语句中的 *d
取消引用指针。不过,为了回答您的问题,C++ 允许将 0 作为任何对象的默认初始值设定项,这就是为什么它可以用于将指针初始化为 null(0 和 null 是相同的)。值为 1 时,您要求编译器将整数转换为指针,这需要显式转换。
关于c++ - 在指针变量中存储非零的整数常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477160/