c++ - 在指针变量中存储非零的整数常量

标签 c++ c

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/

相关文章:

c++ - 无符号字符数组的十进制 ascii 值

c - 如果源代码在 win32 中是 UTF-8 编码的,如何显示 UTF-16 const 字符串?

c++ - 类 CSV 格式的 C 库支持多个 "tables"和“命名引用

c++ - OpenMP 线程、数据访问延迟和 STL 数据容器

c++ - 为什么 range-for 找不到我对 std::istream_iterator 的开始和结束重载?

c - 从 fortran 传递到 c 的字符串上的额外内容是什么以及如何停止它?

c++ - Qt 拆分 QString

c - 丢弃距离测量中的失控值

c++ - 如何将字符串分配给函数C++

C++ STL 算法 : get pointers of elements in container