如何打印内存地址?

时间:2016-10-12 15:40:31

标签: c linux pointers

我在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指针投射?

error message:

1 个答案:

答案 0 :(得分:5)

%p说明符需要void*,而您需要int*。所以只需投下它:

printf("%p\n", (void*)&var);

如果这是一个正常的函数,从int *到void *的转换将是自动的,不会产生警告。但由于printf()是一个可变函数,因此转换必须是显式的。变量函数的参数不需要进行类型检查。但是,一些编译器知道标准函数(包括printf())如何工作并会警告错误的使用。