printf("%p",a) 和 printf("%p",&a) 的区别

printf("%p",a) 和 printf("%p",&a) 的区别

阅读 14.6k
3 个回答
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *a = (int*)malloc(sizeof(int));
    *a = 1;

    printf("\na = %d", *a);
    printf("\na heap address = %p", a);
    printf("\n&a stack address = %p", &a);

    printf("\n");
    free(a);
}

gcc programname.c //编译
./a.out //运行

结果如下(程序打印出的结果不尽相同):

a = 1
a heap address = 0x7fd67bc000e0
&a stack address = 0x7fff528d8ac8

第一行表示 变量a的值为1
第二行表示 变量a所存储的内存地址0x7fd67bc000e0,(存放整数 ‘1’ 所用的4个bytes, 64位机器的话就是8个bytes),这块内存在堆上-heap
第三行表示 变量a本身(一个整数型指针 int* )的内存地址0x7fff528d8ac8,这块内存在栈上-stack。建议参考 ARM寻址方式 @Hao Dong

新手上路,请多包涵

printf("%p", a)用地址的格式打印a变量的值,printf("%p", &a)打印a变量所在的地址。

printf("%p", a)用地址的格式打印a变量的值,printf("%p", &a)打印a变量所在的地址。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进