-1
我學習C和也遇到了這個問題,當我處理函數的棧幀,考慮下面的代碼:地址
#include <stdio.h>
void function1(void* a){
int b = 5;
printf("para add: %p local add: %p\n", &a, &b);
}
int main(){
function1(20);
function1(30);
function1(40);
function1(50);
function1(60);
function1(70);
return 0;
}
的結果是:
para add: 0020FF08 local add: 0020FEFC
para add: 0020FF08 local add: 0020FEFC
para add: 0020FF08 local add: 0020FEFC
para add: 0020FF08 local add: 0020FEFC
para add: 0020FF08 local add: 0020FEFC
para add: 0020FF08 local add: 0020FEFC
我知道每個函數都有它的地址,但每個局部變量的地址和函數中的每個參數總是一樣的嗎?
'printf()'中的'%p'調用'void *',而不是另一個指針。將具有錯誤類型的數據傳遞給'printf()'調用未定義的行爲*。 – MikeCAT
C標準沒有強制使用堆棧或任何其他內存管理技術。有很好的實現,根本不使用堆棧。 – Olaf