在下面的程序中,我通过为它分配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)
指针变量是一个对象的是可以指向另一个对象。在此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)
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |