所以我现在只学习了 C 语言大约 3 周,我正在使用this https://www.youtube.com/watch?v=5BpYD7TxvKU教程帮助我理解指针。
我写的一切都和他一样,但我使用 Putty 和 Vim 来编写我的代码。然而,当我编译代码时,它说“警告:格式“%p”需要“void *”类型的参数“。为什么我必须强制转换才能输入“void *”,而在教程中他却没有这样做?
int main()
{
int tuna = 19;
int *pTuna = &tuna;
printf("Address \t Name \t Value \n");
printf("%p \t %s \t %d \n", pTuna, "tuna", tuna);
return 0;
}
我已将 pTuna 转换为“void *”,程序编译并运行良好,但我不明白为什么以及为什么在教程中不需要转换。
谢谢您的回答!
它是编译器执行其主要工作之一类型检查您告诉它使用的值。pTuna
is a 指向 int 的指针 (e.g. int *
)和%p
格式说明符需要一个generic (or void *
) 指针。
编译器发出一个warning关于类型不匹配,告诉您再次查看问题并提供将使用的值的正确转换%p
转换说明符。您遵守:
printf("%p \t %s \t %d \n", (void *)pTuna, "tuna", tuna);
再次编译——然后warning消失了,编译器已经完成了它的工作,一切又恢复正常了。 (是的,您可以忽略警告,但如果警告和无错误编译不是绝对的个人要求,那么可能值得添加。(是的,在某些情况下,警告可能是已知且不可避免的结果)一些实现,但这些实现很少而且相差很远。这里的这个不是其中之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)