下面是我不明白的代碼。查詢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;
}
當我輸入一個號碼爲4,輸出爲Values are 4 4
當我輸入一個號碼爲-4,輸出Values are -4 4
我無法理解它是如何能夠打印絕對值?。在if循環和else循環中定義的變量abs應該在退出後被釋放。
請讓我知道。
問候, darkie
您確定這是原因嗎?我的意思是,你怎麼知道新的'abs'和old'abs'位於堆棧的同一個地址? – 2010-06-22 21:07:11
是的,我確定。 Google爲一款名爲Olly Debugger的免費應用程序。打開你的應用程序,或類似Notepad.exe。它會停留在節目的開始位置。在Olly屏幕的底部,您會看到兩個面板 - 左邊是程序的內存,右邊是原始的,右邊是您看到的原始堆棧。現在多次點擊F7並查看堆棧更改。閱讀有關wikipedia上的「stack」以瞭解更多信息。一旦你明白了,你就會完全理解我的回答。如果需要,詢問更多。 – Poni 2010-06-22 22:20:33
順便說一句 - 我無法用MSVC++ 2008編譯器(不是調試版本或者發行版本)重現這種行爲,它告訴我們這是一種依賴於編譯器的行爲。 – Poni 2010-06-22 22:30:43