【单链表中对链表L进行操作究竟怎样确定传不传地址?】
举个例子:
- C/C++ code
Status ListInsert(LinkList L,int i,ElemType e) /* 算法2.9。不改变L【问题:不是说要传地址才能对L进行修改么?这里没传地址,不能修改L,那又怎么进行插入操作?数据结构没学好,希望大家帮帮忙】 */ { /* 在带头结点的单链线性表L中第i个位置之前插入元素e */ int j=0; LinkList p=L,s; while(p&&j<i-1) /* 寻找第i-1个结点 */ { p=p->next; j++; } if(!p||j>i-1) /* i小于1或者大于表长 */ return ERROR; s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */ s->data=e; /* 插入L中 */ s->next=p->next; p->next=s; return OK; }
[解决办法]
实参是一个临时变量,是对你传递的参数的一个拷贝,无论你传递的是什么类型,参数本身并没有传递给函数,所以你传递的参数也都是无法修改的。即便是传递指针,指针本身也是无法修改的,但是你可以修改指针指向的空间,指针实参以及函数里获取的那个临时变量锁指向的空间都是一样的,所以修改临时变量指向的空间就是修改了实参指向的空间,从而达到了修改外部变量的目的。所以对于L,你不能修改的是L这个指针,但是你可以修改L指向的空间,比如向它指向的空间添加元素。