函数调用时参数入栈,因此可以定义两个函数,分别输出参数地址,以此来确定栈的生长方向。
//确定栈的生长方向
//自定义函数fun1() 和fun2(),其中fun1()内部调用fun2(),输出参数地址
#include<stdio.h>
void fun2(int b) { printf("fun2: %ld\n", &b);}
void fun1(int a) {
printf("fun1: %ld\n", &a);
fun2(a);
}
int main( ) {
int a = 1;
fun1(a);
return 0;
}
result:
[scwangj@LB270107 cfd_simple]$ gcc -o hello hello.c
[scwangj@LB270107 cfd_simple]$ ./hello
fun1: 140735673261756
fun2: 140735673261724
[scwangj@LB270107 cfd_simple]$
上述程序中,首先fun1被调用,参数a入栈;在fun1函数内部,先输出参数fun1函数的参数a的地址,然后调用fun2,fun2的参数b入栈;从结果来看,linux下栈的生长方向由高地址向低地址增长。