【发布时间】:2014-02-23 19:18:20
【问题描述】:
int main(void) {
int i = 2, k = 3, a;
i++;
++k;
{
int i = 0;
i = k++;
printf("%d,%d,", i, k);
}
printf("%d,%d", i, k);
getchar();
return 0;
}
为什么这段代码会产生输出“4,5,3,5”,为什么不产生“4,5,4,5”?为什么当我通过 f7 键 c++ 跟踪代码时,它首先是 printf,然后是第二个 printf()。那么根据这个变量的值一定是4,那为什么在第二个printf()函数中给i变量的值是3呢?
【问题讨论】:
-
范围,范围,范围,范围,...
-
i在花括号中声明不是在main范围内声明的i。您可以将它们视为i1和i2。 -
这意味着
i在main函数和花括号中,在这两种情况下,i的值都存储在不同内存地址的不同内存位置? -
@AndroidDeveloper 是的,它们都位于堆栈的不同位置。 (如果你想让某人用@标记他,就像我对你做的那样,所以他会收到通知。否则,他很容易错过你在和他说话,他没有收到任何通知。)
标签: c printf curly-braces