有没有一个好方法摆脱以下警告?我知道这是一个类型问题,因为我传递了一个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)