查询C中的激活记录

nam*_*ked 0 c

以下是我不明白的代码.

#include<stdio.h>

int main(int argc, char *argv[])
{
      int num;

      printf("\n Number: " );
      scanf("%d", &num);

      if (num >= 0)
      {
           int abs = num;
      }
      else
      {
            int abs = -num;
      }

      {
          int abs;
          printf("\n Values are %d %d", num ,abs);
       }
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我输入一个数字为4时,输出是Values are 4 4
当我输入一个数字为-4时,输出为Values are -4 4

我无法理解它是如何打印绝对值的?在if循环和else循环中定义的变量abs应该在退出后被释放.

请告诉我.

问候,黑暗

rlb*_*usa 6

你是绝对正确的.

你看到最后一个块在哪里int abs被宣布了吗?请注意,abs未初始化,使用未初始化的变量会产生未定义的结果.使用您的特定编译器,只需要您运气好,并且新的内存块abs仍然包含来自(过期的)先前范围的结果.