为什么它们之间的互相赋值不会折腾到链表本身?开始定义的是链表的一体!?还是没想明白!很感谢你们的回答
追答假设有一个函数,利用指针作形参实现交换两个变量的值,如果函数体里面只有P=Q这样的表达式,没有对*P之类的赋值,那就不会折腾到他们原来所指的变量,函数返回后该多少还是多少。
其实我个人觉得链表的插入操作和两个变量的交换操作很类似。看这个程序:
#include
void swap_old()
{//通过指针和中间变量交换两个变量的值
int a=0,b=2;
int *P=&a,*Q=&b,t;
printf("交换前:%d\t%d\n",a,b);
t=*P;
*P=*Q;
*Q=t;
printf("交换后:%d\t%d\n",a,b);
}
void swap_new()
{//通过指针和中间变量将数组中的第二个元素-1交换到末尾位置
int i,a[9];
int *P,*Q,t;
a[0]=0;
a[1]=-1;//把a[1]看成类似于链表结尾的NULL,插入操作相当于交换NULL和新节点的位置
for(i=2;inext指针域赋值)并跟进(指针赋值)。两个外来户离开后,链表不因为他们的离开而消失。
Q的地址是如何保存到P的呢?我一直认为系统给P(结构指针)开的内存空间只来装数据,还有一指针,好像并没有多的空间去暂存Q得地址
追答你对指针的理解可能没到位。
Q与P仅仅是普遍的变量,其内容只能放一个结构的地址而已,
如果是汇编,仅仅是一个简单的MOV传送指令