关于指针做形参,我这样的写法是不是不科学的????
InsBefore()函数中的Link *p这样用好不好,Link本身就是个指向节点的指针,我又用到了一个指向指针的指针Link *P,但是想要完成函数功能好像只能这样.
有没有更好的方法,
学C的时候没学好,嘿嘿,另外,还请高手给我说说指针如何做形参,最近学习时常用到指针,指到我头也大了,老出错。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE1
#define FALSE0
#defineOK1
#define ERROR0
#define INFEAIBLE-1
#define OVERFLOW-2
typedef int ElemType;
typedef int status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}*Link;
typedef struct{
LNode *head,*tail;
int len;
}LinkList;
status MakeNode(Link *L,ElemType e)
{
*L=(Link)malloc(sizeof(LNode));
if(!*L)
{
return ERROR;
}
(*L)-> data=e;
(*L)-> next=NULL;
return OK;
}//MakeNode 生成一个节点
status InitList(LinkList *L)
{
Link t;
if(MakeNode(&t,0)==ERROR)
{
return ERROR;
}
L-> tail=L-> head=t;
L-> len=0;
return OK;
}//InitList 初始化一个LinkList链表,head为头指针
status InsBefore(LinkList *L,Link *p,Link s)
{
Link index=L-> head;
while(index-> next!=*p)
{
index=index-> next;
}
s-> next=*p;
index-> next=s;
L-> len++;
*p=s;
return OK;
}//InsBefor 已知p指向线性链表中的一个节点,将s所指节点插在p所指节点指前
//并修改p指针指向新插入点
void main()
{
int n,i;
LinkList L;
Link temp,temp1,index;
ElemType e;
InitList(&L);
printf( "请输入你要生成的链表长度:\n ");
scanf( "%d ",&n);
while(L.len <n)
{
printf( "\n请输入第%d个节点的data\n ",L.len+1);
scanf( "%d ",&e);
MakeNode(&temp,e);
L.tail-> next=temp;
L.tail=temp;
L.len++;
}
index=L.head-> next;
while(index)
{
L.tail=index;
index=index-> next;
}
index=L.head-> next;
for(i=0;i <3;i++)
{
index=index-> next; //index指向链表的第四个元素
}
MakeNode(&temp1,111);
InsBefore(&L,&index,temp1);
}
[解决办法]
引用啊
[解决办法]
看样子应该没问题。
引用到是很方便,但是据说不安全,不过俺常用,呵呵,省事啊
[解决办法]
是不是刚学数据结构啊,我也是,头痛
[解决办法]
为什么不安全?????注意点就可以了
[解决办法]
引用比指针好用多了
[解决办法]
把应用当成一个变量的别名,比如你可以叫你爸爸叫作“爸爸”,也可以叫”爹“
[解决办法]
楼主只要想想各种变量的地址,指针的一些问题,就很清晰了!