printf指针参数类型警告?

Ehe*_*Tov 5 c clang

有没有一个好方法摆脱以下警告?我知道这是一个类型问题,因为我传递了一个unsigned long pointer而不是一个unsigned long,但是printf以某种方式支持指针作为参数吗?我的迂腐想要摆脱这个警告.如果没有,你如何处理打印取消引用的指针值printf

#include <stdio.h>

int main (void) {
    unsigned long *test = 1;
    printf("%lu\n", (unsigned long*)test);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

警告:format指定类型'unsigned long'但参数具有类型

oua*_*uah 12

unsigned long *test = 1;
Run Code Online (Sandbox Code Playgroud)

无效C.如果要指向有价值对象的指针1,可以执行以下操作:

unsigned long a = 1;
unsigned long *test = &a;
Run Code Online (Sandbox Code Playgroud)

或使用C99复合文字:

unsigned long *test = &(unsigned long){1UL};
Run Code Online (Sandbox Code Playgroud)

现在还:

printf("%lu\n", (unsigned long*)test);
Run Code Online (Sandbox Code Playgroud)

是不正确的.你真的想要:

printf("%lu\n", *test);
Run Code Online (Sandbox Code Playgroud)

打印unsigned long对象的值*test.

要打印test指针值(以实现定义的方式),您需要:

printf("%p\n", (void *) test);
Run Code Online (Sandbox Code Playgroud)