C 为什么在尝试显示整数内存位置时会出现叮当声错误?

C 为什么在尝试显示整数内存位置时会出现叮当声错误?,c,integer,C,Integer,我查看了与我的问题相匹配的问题,但找不到答案。在创建一个显示整数“i”和“k”的内存位置的程序之后,它没有使用clang进行编译。使用SoloLearn的IDE时,效果很好 #include <stdio.h> void test(int k); int main() { int i = 0; printf("The address of i is %x\n", &i); test(i); printf("The address of i

我查看了与我的问题相匹配的问题,但找不到答案。在创建一个显示整数“i”和“k”的内存位置的程序之后,它没有使用clang进行编译。使用SoloLearn的IDE时,效果很好

#include <stdio.h>

void test(int k);

int main() {
    int i = 0;

    printf("The address of i is %x\n", &i);
    test(i);
    printf("The address of i is %x\n", &i);
    test(i);

    return 0;
}

void test(int k) {
    printf("The address of k is %x\n", &k);
}

我需要对int进行签名吗?如果需要,我应该怎么做?

如果要打印变量或内存位置的地址,应该使用
%p
格式说明符。例如

int i = 0;
printf("The address of i is %p\n", (void*)&i);/* %p format specifier expects argument of void* */ 
C
标准:

(C11,7.21.6.1p8格式化输入/输出函数)“p参数 应是指向无效的指针。”


你仔细读了那本书了吗?它解释了原因并提供了打印指针的更好方法(使用
%p
)。请阅读您正在使用的每个标准函数的文档!顺便说一句,你的不是你的编译器。它运行的是一个编译器,可能是@BasileStarynkevitch的某个版本,我知道IDE不是编译器。我知道他们可以使用任何编译器。因此,我尝试使用gcc编译,但也遇到了同样的问题。警告非常明确,阅读文档将提供一个清晰的解决方案。对于初学者来说,了解自己是一个很好的练习。(是的,这很有帮助——想想看)。可能是重复的感谢。它现在编译得很好。但这不是我想要的十六进制输出<代码>%x似乎不起作用。我在网上搜索了一个又一个答案,每个人都说只要使用
%p
。为什么
%x
不起作用?请注意,
%p
是用于打印地址的格式说明符&默认情况下,它以十六进制格式打印。例如,在我的系统中,该
int i=10;printf(“%p\n”,(void*)&i)
打印
0xbfa286cc(一些随机地址)
这是变量
i
的内存位置。接下来,
%x
格式说明符用于打印有符号整数的十六进制等效值,而不是打印地址。例如
inti=255;printf(“0x%x\n”,i)
打印
0xff
哪个十六进制等同于
255
。我希望这能消除你的疑虑。欢迎@PaulDaniels加入!!!如果有帮助的话,那就接受我的答案。我该怎么做?你可能想读一下这篇文章,然后
int i = 0;
printf("The address of i is %p\n", (void*)&i);/* %p format specifier expects argument of void* */