【发布时间】:2023-03-26 23:29:02
【问题描述】:
当我运行程序时,它会打印变量 a 的值。但是当我评论“cout<<&b<<endl<<&a<<endl;”行时,它会打印一个垃圾值。
背后的解释是什么?
#include<iostream>
using namespace std;
int main()
{
int a = 9;
int b = 10;
int *pb = &b;
cout<<&b<<endl<<&a<<endl;
cout<<*(pb+1);
}
【问题讨论】:
-
未定义的行为 -
*(pb+1);访问“越界” -
这是未定义的行为,一切正常。调用约定与此有什么关系
-
因为
pb指向一个单个int变量。当您执行*(pb+1)时,它等于pb[1],它试图将pb用作数组并打印数组中的second 值。这超出了pb指向的范围并导致未定义的行为。未定义的行为会使您的整个程序格式错误且无效。 -
这不是问题,但您真的需要
std::endl需要的额外内容吗?'\n'结束一行。
标签: c++ stack calling-convention