c++ - 我有 2 段 c++ 代码应该工作相同
问题描述
这是第一段代码,输出 44:
const int a[] = {3};
int* b = (int*)&a[0];
*b = 4;
cout << a[0] << *b;
这是第二个,输出 34:
const int a = 3;
int* b = (int*)&a;
*b = 4;
cout << a << *b;
我不知道为什么会有区别。你们能解释一下吗?
解决方案
指向声明为的变量 的指针const
只能分配给也声明为的指针 const
。您违反了规则,理想情况下您的编译器应该阻止您这样做。
没有gcc
,,clang
并MSVC
防止此类错误,并且如评论中所述,您有未定义的行为,而不是至少一个警告。但是zapcc
编译器会使您的程序崩溃并带有Segmentation fault
.
推荐阅读
- machine-learning - 从 scikit-learn 中的特征选择中检索原始输入变量
- javascript - 将可选函数分配给 Javascript 类
- javascript - 如何在 Elementor 中向弹出窗口添加点击事件?
- intellij-idea - 有没有办法在变量上自动打印日志调试语句?
- javascript - Node.js 中内置的动画 gif 的背景图像
- python - 在 Python 函数中,如何显示图像并在 plt.show() 之后继续执行代码?
- javascript - React 组件适用于本地但不适用于 NPM
- html - 替代元素类型以匹配锚元素的样式
- drag-and-drop - react-beautiful-dnd droppable 中的固定位置标头
- python - Python Popen 无法运行 msiexec