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