我在youtube教程中看到过关于人printf
指针变量的内存地址的指针。有问题的视频在Code:Blocks中做了这个,并且它与%p
一起工作,但每当我在Geany(VirtualBox)中尝试完全相同的东西时,我得到一个编译错误。我应该尝试另一种%字母Linux吗?
int main(int argc, char *argv[]){
int var;
printf("%p\n", &var);
return 0;
}
我不需要它来进行锻炼或其他什么,只需要好奇心(并且为了更好地理解指针的概念,我猜)。 提前谢谢!
编辑:错误消息是Linux要求我将&var
投射到(void*)
才能打印它。对不起,我不是很清楚:我的问题基本上是,这是一个Linux / Windows的东西吗?为什么Windows会像现在这样接受它,而Linux希望我把它作为void
指针投射?
答案 0 :(得分:5)
%p
说明符需要void*
,而您需要int*
。所以只需投下它:
printf("%p\n", (void*)&var);
如果这是一个正常的函数,从int *到void *的转换将是自动的,不会产生警告。但由于printf()是一个可变函数,因此转换必须是显式的。变量函数的参数不需要进行类型检查。但是,一些编译器知道标准函数(包括printf())如何工作并会警告错误的使用。