0

我有这个:

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

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

让我们尝试更好地解释,假设它们是 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)的任何变化都不应该改变 value r。这只是一个整数。

问题是:我如何定义MAGIC

4

3 回答 3

3

如果你想要的是可能的,那么

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

会做的。

于 2013-08-04T15:09:19.597 回答
1

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

代码的意图应该更加明确和明确,因此:

    #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!

于 2013-08-04T21:09:04.703 回答
0

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

unsigned int *y;

MAGIC 应该只是操作员所指向的内容

int r = *y;

MAGIC 只是星号。

于 2013-08-04T15:09:40.117 回答