我如何获得这个地址?

时间:2013-08-04 15:05:35

标签: c pointers memory-address

我有这个:

  unsigned int y = (unsigned int)(int*)foo;

如何获取存储在foo点的内存值中的地址?

让我们试着更好地解释,假设thery是int类型:

int x = 10;
int *foo = &x;
unsigned int y = (unsigned int)(int*)foo;
int r = MAGIC(y); /* should be 10 */
x = 13; /* r still should be 10 */

y应该保存x的地址,它是10整数的地址。

r复制 y位置的值,10整数。

因此,x(如x = 13)中的任何更改都不应更改值r。这只是一个int。

问题是:如何定义MAGIC

3 个答案:

答案 0 :(得分:3)

如果您想要的是什么,那么

#define MAGIC(y) (*((int*)(y)))

会这样做。

答案 1 :(得分:1)

您的代码尝试使用y作为指针,实际上它是作为unsigned integer定义给C编译器的。在“糟糕的日子”中写回的代码会像你的例子那样做。

代码应该在其意图中更加明确和明确,因此:

    #include <stdlib.h>
    main()

    {
    int x = 10;
    int *foo = &x;

    int *y = foo;

        #define MAGIC(A) *A
    int r = MAGIC(y); /* should be 10 */

    x = 13; /* r still should be 10 */

    printf("x=%d, r=%d", x, r);
        // printed (as expected) :: x=13, r=10

     }

这些天没有理由解决C编译器的问题!!

如果您要维护一些像原始示例那样的旧代码,那么使用今天的编程风格重新编写代码可能是值得的。注意,它可以保持用C语言编写,只是格式良好的C!

答案 2 :(得分:0)

如果y要保存x的地址,则应将其声明为:

unsigned int *y;

MAGIC应该只是 运算符指向的内容。

int r = *y;

MAGIC只是星号。