任何人都可以请详细说明此代码中的引用行为,为什么它在第一行而不是11行打印12.
下面是代码
#include <cstdio>
using namespace std;
int &fun()
{
static int x = 10;
x++;
return x;
}
int main()
{
int *ptr=&fun();
int *ptr1=&fun();
printf("%p %p \t %d %d",(void*)ptr,(void*)ptr1,*ptr,*ptr1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码的输出是
134519132 134519132 12 12
请解释为什么12在第一次通话时打印而不是11我知道在第二次通话时它应该打印12
您的错误似乎在于认为一旦可用就立即printf()
打印。*ptr
它不是; 直到 和都计算完毕printf()
后才会被调用。由于 和都指向相同的内存位置(这是一个静态变量),并且该位置在第一次调用和第二次调用后都会更新,因此该地址保存该值。ptr
ptr1
ptr
ptr1
fun()
归档时间: |
|
查看次数: |
211 次 |
最近记录: |