c++ - 为什么“cout”以错误的顺序打印变量
问题描述
以下代码:
int main(){
int a;
int b;
int c=0;
int *p;
p=&a;
*p = 10;
*(p+1) = 20;
*(p+2) = 30;
cout << a << " " << b << " " << c << endl;
return 0;
}
给出输出:
10 30 20
解释 ?如果 c 未初始化 (int a,b,c;) 预期结果:10 20 30
解决方案
这是完全未定义的行为。指针运算只允许在单个数组内部(甚至在结构成员之间,尽管一些编译器可能会容忍后者)。局部变量不形成数组。它们可能在内存中有任意位置。
推荐阅读
- azure - 从私有映像在 Azure 中创建 VM,并设置托管数据磁盘名称
- c# - 无法在 C# 项目中打开绑定的 excel 文件
- angular - Angular 7 rxjs/forkJoin:您在预期流的位置提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable
- elasticsearch - 带有常量分数包装器的 Elasticsearch 布尔查询
- xcode - Core Data 中默认的 1982-02-12 17:00:00 时间戳有什么意义?
- android - 验证微调器上的用户输入
- mysql - 将数据从 mysql 迁移到 postgres pgloader IRONCLAD::SIMPLE-OCTET-VECTOR
- awk - 获取非空白字符的最后一行的行号
- javascript - 在 Highcharts 中追加数据值
- ios - 是否可以使用电子邮件中的通用链接(深层链接)启动 iOS 应用程序 - iOS