這裡考慮物件做為函式引數與返回值時,使用無名臨時變數的情況。
臨時變數記憶體分配
class node
};void fn1( node n )
node fn2()
void main()
呼叫fn1
時的反彙編結果:
結論是:臨時變數的記憶體來自於函式的呼叫者
修改臨時變數的值
fn1的引數並不是臨時變數本身,而是由臨時變數填充,在fn1內部無法對其變數。而
fn2傳入的是臨時變數指標,可以在
fn2內外對其進行修改,下面是實驗**:
static int gtemp = 0;
class node
else
this->data++;
}};node fn2()
void main()
__asm int 3
}
C 憤恨者札記5 臨時變數的記憶體分配
這裡考慮物件做為函式引數與返回值時,使用無名臨時變數的情況。臨時變數記憶體分配 class node void fn1 node n node fn2 void main 呼叫fn1 時的反彙編結果 結論是 臨時變數的記憶體來自於函式的呼叫者 修改臨時變數的值 fn1的引數並不是臨時變數本身,而是由...
C 臨時變數的生命週期
c 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類 string proc int main 其中第 6 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種臨時變數的生命週期很短,當表示式完成...
C 臨時變數的生命週期
c 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類 1 函式的返回值,如 1 string proc 25 6int main 7其中第 8 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種...