查找堆栈中char数组的地址

时间:2014-10-26 18:41:43

标签: c memory-management stack

我试图理解堆栈的布局以及如何分配内存。

我有以下程序,我想知道buffer数组的起始地址,如果假设堆栈从地址12000开始(例如)。

void function( int a, int b ) {     
    char buffer[ 512 ]; 
} 

void main() {
    function( 1, 2 );
}

2 个答案:

答案 0 :(得分:1)

函数中非静态局部变量的地址取决于调用函数时执行点的堆栈状态(SP寄存器的值)。

简单来说,buffer每次调用function时都可能有不同的地址。

强调这一点后,您可以使用以下任一选项:

printf("%p", buffer); // applicable only for arrays
printf("%p",&buffer); // applicable for arrays and for non-arrays

答案 1 :(得分:0)

您可以显示运行时使用的地址

#include <stdio.h>

void function( int a, int b ) {
    int c;
    char buffer[ 512 ]; 
    int d;
    printf ("Address of a is %p\n", &a);
    printf ("Address of b is %p\n", &b);
    printf ("Address of c is %p\n", &c);
    printf ("Address of d is %p\n", &d);
    printf ("Address of buffer is %p\n", buffer);
} 

void main() {
    function( 1, 2 );
}