突然发现一个问题
变量i的地址是每次运行程序时编译器自动分配的,所以每次变量i的地址都不一样,p的值就是变量i的地址,所以p的值每次都不一样,&p就是取p的地址,也是随机分配的。
printf("%d\n",p);//这是查看指针值,即i的地址,与printf("%d\n",&i);等效
printf("%d\n",&p);//这是查看存放指针的地址,即p的地址
变量地址会变很难理解吗,你每次运行程序,内存都会随机开辟一块空间给你用,不可能给你留出个单独的空间你每次都用同一块内存吧。至于为什么会是这个,那哪有什么原因,赶上什么算什么呗。那你出门赶公交车为什么车牌号是5结尾不是3结尾,这还能有什么原因吗。
是的两个不同的东西,指针变量也是变量,它也需要内存空间。只是它的内存空间存是其它变量的地址。它自身也有一个地址
printf(“%d\n”,p)打印出来的是变量i的地址,
printf(“%d\n”,&p)打印出来的是变量p自己的地址
重点是你两次运行是重新启动的程序。每次程序运行变量所分配的空间,是由操作系统决定的,不一定给你分配哪个,这里面操作系统就一套调度策略。即使你可能看到有时候出现几次分配相同的地址,你也不能说下一次还是这个地址。
说白了,地址存哪里,不归你管啊。