NULL指针的地址

Bah*_*ali 2 c null pointers

在下面的程序中,我通过为它分配NULL来创建*ptr.据我所知,*ptr = NULL; 意思是,*ptr指向什么都没有.如果是这种情况,为什么ptr和&ptr给出不同的结果?

#include<stdio.h>

int main() {

  int *ptr=NULL;

  printf("%p \n",ptr);
  printf("%p \n",&ptr);
}
Run Code Online (Sandbox Code Playgroud)

输出:

 0 
 0x7fff3415dc40 
Run Code Online (Sandbox Code Playgroud)

Ant*_*ala 7

指针变量是一个对象的是可以指向另一个对象。在此int *ptr = NULL;声明ptr为指针对象,它可能指向的对象int

最初存储在此指针对象中的值是NULL(它初始化为NULL,因此ptr不指向任何对象)。

现在,它ptr驻留在内存中。它需要足够的字节来包含指向对象的地址。因此,它也需要一个地址。因此

  • ptr计算指向的对象的地址ptr
  • &ptr计算ptr对象本身在内存中的位置
  • *ptr如果它指向,则求ptr指向该对象。如果未指向对象,则行为是不确定的。

另外,%p需要使用a void *作为相应的参数,因此打印它们的正确方法是

printf("%p\n", (void *)ptr);
printf("%p\n", (void *)&ptr);
Run Code Online (Sandbox Code Playgroud)


小智 6

ptr保存NULL您指定的值.

&ptrptr你的情况下变量的地址0x7fff3415dc40