【发布时间】:2016-02-26 00:55:05
【问题描述】:
我正在学习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
我知道每个函数也会有自己的地址,但是函数中每个局部变量和每个参数的地址总是一样的吗?
【问题讨论】:
-
%pinprintf()调用void*,而不是另一个指针。将类型错误的数据传递给printf()会调用未定义的行为。 -
C 标准不强制要求使用堆栈或任何其他内存管理技术。有一些很好的实现根本不使用堆栈。