1

我试图打印指针变量的地址而不是它指向的地址,有人能帮我实现吗?以下是我正在尝试的,但它显示了我无法解决的警告。谢谢!

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

int main()
{
    int* y;
    printf("%p\n",y);
    printf("%x\n",&y);
    y = (int*)malloc(sizeof(int));
    printf("%p\n",y);
    printf("%x\n",&y);
    return 0;
}

编译警告:

Warning: format ‘%x’ expects argument of type ‘unsigned int’,
    but argument 2 has type ‘int **’ 

Output:
0xb773fff4
bfa3594c
0x8361008
bfa3594c
4

2 回答 2

4

你的第二个printf()应该采用一种"%p\n"格式,并且严格来说是一个演员:

printf("%p\n", (void *)&y);

演员实际上改变任何东西的机器数量是相当有限的。

于 2012-12-06T03:50:23.490 回答
-1

该代码似乎在 Visual Studio 2012 上编译时没有警告或错误。

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

    int _tmain(int argc, _TCHAR* argv[])
    {
        int* y = 0;
        printf("%p\n",y);
        printf("%x",&y);
        y = (int*)malloc(sizeof(int));
        printf("%p\n", y);
        printf("%x",  &y);

        return 0;
    }

唯一的建议是在声明 y 时对其进行初始化。

于 2012-12-06T03:55:54.903 回答