如何在C中显示某些变量的起始地址? [英] How to show the starting address of some variables in C?

查看:118
本文介绍了如何在C中显示某些变量的起始地址?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

extern char **environ;

int global_x = 10;                  // initialised global variable
int global_y;                       // un-initialised global variable
char global_array1[] = "Hello, world!";     // initialised global array and a string literal
char global_array2[10];             // un-initialised global array
char *global_pointer1 = "bye!";         // global pointer to a string literal 
char *global_pointer2;              // un-initialised global pointer 
float global_float = 100.1;         // initialised global variable
double global_double;               // un-initialised global variable

#define ONEGB  1073741824
#define ONEMB  1048576
#define ONEKB  1024

char *addr(unsigned long a)
{
    unsigned long r; // remainder

    r = (unsigned long) a;
    int gb = (int) ( r / ONEGB );

    r -=  gb * ONEGB;
    int mb = (int) ( r  / ONEMB );

    r -=  mb * ONEMB;
    int kb = (int) ( r  / ONEKB );

    r -=  kb * ONEKB;
    int b  = (int) ( r );

    char *p = malloc(64);

    sprintf(p, "%4dGB, %4dMB, %4dKB, %4d", gb, mb, kb, b);
    return p;
}

int f2(int x)
{
    char * f2_p;
    int f2_x = 21;

    f2_p = malloc(1000);         // dynamically allocated memory

    // print out the address of x
    // print out the addresses of f2_p, and f2_x
    // print out the starting address of the dynamically allocated memory
    .....

    L: f2_x = 10;
    return f2_x;
}

void f1(int x1, int x2, float x3, char x4, double x5, int x6)
{
    int f1_x = 10;
    int f1_y;
    char *f1_p1 = "This is inside f1";   // pointer to another string literal 
    char *f1_p2;

    f1_p2 = malloc(100);         // dynamically allocated memory

    // print out the addresses of x1, x2, x3, x4, x5, x6
    // print out the addresses of f1_x, f1_y, f1_p1, f1_p2
    // print out the address of the string literal "This is inside f1"
    .....

    f1_y = f2(10);
    return;
}

int main(int argc, char *argv[])
{

    // print out the addresses of argc, argv
    // print out the starting address and end address of the command line arguments of this process
    // print out the starting address and end address of the environment of this process
    // print out the starting addresses of function main, f1, and f2
    // print out the addresses of global_x, global_y, global_array1, global_array2, global_pointer1,
    //           global_pointer2, global_float, global_double
    // print out the addresses of string literals 10, "Hello, world!", "bye", 100.1

    ..... 

    // call function f1 with suitable arguments such as 12, -5, 33.7, 'A', 1.896e-10, 100 
    f1( .... );

    exit(0);
}

我试图在google上搜索,但是找不到其他有用的东西,在这种情况下,我只想弄清楚如何打印出动态分配的内存的起始地址;打印此过程命令行参数的起始地址和结束地址;打印此过程环境的起始地址和结束地址;打印函数main,f1和f2的起始地址. 有人可以帮助我吗?..谢谢你!

I tried to search on google, but cannot find sth useful, and in this case I just want to figure out how to print out the starting address of the dynamically allocated memory; print out the starting address and end address of the command line arguments of this process;print out the starting address and end address of the environment of this process;print out the starting addresses of function main, f1, and f2. anybody can help me?..thank you!

推荐答案

main中:

打印出argc, argv-printf ("%d, %d", &argc, argv);

打印出此过程的命令行参数的起始地址和结束地址-printf ("%d", (void *)argv);

print out the starting address and end address of the command line arguments of this process - printf ("%d", (void *)argv);

打印出此过程环境的起始地址和结束地址-printf ("%d", (void *)environ);

print out the starting address and end address of the environment of this process - printf ("%d", (void *)environ);

打印出功能main, f1, and f2-printf ("%d %d %d", &main, &f1, &f2);

打印出global_x, global_y, global_array1, global_array2, global_pointer1, global_pointer2, global_float, global_double的地址-只需在要打印其地址的每个变量前面使用&运算符.

print out the addresses of global_x, global_y, global_array1, global_array2, global_pointer1, global_pointer2, global_float, global_double - just use the & operator in front of each variable whose address you want to print.

打印出字符串文字的地址10, "Hello, world!", "bye", 100.1-不允许打印字符串文字的地址.

print out the addresses of string literals 10, "Hello, world!", "bye", 100.1 - printing addresses of string literals is not allowed.

f1中:

打印出x1,x2,x3,x4,x5,x6的地址-printf ("%d %d %d %d %d %d", &x1, &x2, &x3, &x4, &x5);

print out the addresses of x1, x2, x3, x4, x5, x6 - printf ("%d %d %d %d %d %d", &x1, &x2, &x3, &x4, &x5);

打印出f1_x,f1_y,f1_p1,f1_p2的地址-printf ("%d %d %d %d", &f1_x, &f1_y, f1_p1, f2_p2);

print out the addresses of f1_x, f1_y, f1_p1, f1_p2 - printf ("%d %d %d %d", &f1_x, &f1_y, f1_p1, f2_p2);

打印出字符串文字的地址"This is inside f1"-不允许使用字符串文字的地址

print out the address of the string literal "This is inside f1" - Taking address of a string literal is not allowed

f2中:

打印出x的地址-printf ("%d", &x);

打印出f2_p和f2_x的地址-printf("%d", f2_p, &f2_x);

print out the addresses of f2_p, and f2_x - printf("%d", f2_p, &f2_x);

打印出动态分配的内存的起始地址-printf ("%d", f2_p);

print out the starting address of the dynamically allocated memory - printf ("%d", f2_p);

这篇关于如何在C中显示某些变量的起始地址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆