请教一下各位:
①像图片里那句话该怎么理解?
②代码里面的p1,p2输出的地址相同这个我可以理解。但是p1和&p1,p2和&p2为什么
就不同呢?还有&p1和&p2之间的地址有什么联系?
问题有点多,谢谢各位啦。
这个东西,其实在你学了数据结构就理解了。其实它就是在说描述的事情跟第一个没有区别。要想一下,在计算机中这些内存该怎么遍历呢?某一个内存区间,怎么知道自己的下一个是在哪呢?p2是指针。只是跟p1指向同一块空间。你这个测试不是很适合作为这个东西的理解。
个人认为,你书上的这一段文字是的描述,很可能是在指链表之类那些数据结构的内部实现机制。
看栈中存放的内容就清楚了,首先p1、p2和a都是局部变量,局部变量本身会在栈中占用空间,占用了空间就会有空间地址;p1或者p2代表变量的值,&p1或者&p2代表变量的地址,也就是它们在栈中占用空间的开始地址;这与a与&a的意义一样;不要因为是指针就忽略了它是变量的本质;
第一个问题,说实话,我觉得纸上这句话好像并没什么用,等其他大神回答你吧。
第二个问题,p1是指针,输出p1代表输出这个指针指向的地址(不是他自身的地址),因为程序p1指向a,同时p2也指向a,所以输出p1和p2是一致的,是a的地址。而&p1不是a的地址,是p1自身的地址,同理&p2是p2自身的地址,这是两个不同的指针,所以他们两的地址不同。
理论上来讲,p1和p2是完全没有关系的,但你非要说有关系,也可以有,就是他们地址都在这个函数的栈里(通常一个函数的栈大小为1M),仅此而已。