C语言链表问题,函数形参加const修饰后为什么还可以被修改?

2024-11-29 11:26:21
推荐回答(2个)
回答1:

const LIST * p; 表示 p所只想的内存不能被修改;
但是p 可以指向其他内存;
LIST * const p; 表示 p不能改变指向,其所指向的内存可以被修改;
所以,如果不希望p被重新赋值的话, 就把参数改为: LIST * const p;
这就是指针常量,与常量指针的问题; 你可以百度下;有解释的更狠明白

回答2:

1.关于insert修改 struct student *insert(void) { #define NULL 0 int Dim; struct student *head,*pf,*pb; int i; head=NULL; for(i=0;i/添加空间申请失败检查 return head; } printf("Please insert Name, Gender, Age,Education,Address,Tel\n"); scanf("%s,%s,%d,%s,%s,%ld\n",pb->Name,pb->Gender,&pb->Age,pb->Education,pb->Address,&pb->Tel);//应输入式修改 if(i==0) {pf=head=pb;} else { pf->next=pb; pb->next=NULL; pf=pb;} printf("%d",head->next->Age); printf("Continue?1 - y 2 - n\n"); scanf("%d",&Dim); if (Dim==2) {i=3000;} } return head; } 意思: A.依申请空间建立链表节点若空间申请失败则推 B.每输入询问否继续建立节点输入数字2则退 2.函数 change1 struct student *change1(char NAME[96],struct student *head) { char flag = 1; struct student *pf,*pb; for(pb=head;pb!=NULL;pb=pb->next) { if(strcmp(NAME,pb->Name)==0) { printf(找相应名字元素请修改相应Education\n"); printf("Please insert New education grade;"); scanf("%s",pb->Education); flag = 0; } } if(1 == flag) { printf(没相应名字元素\n"); } } 意思: 输入元素名字及链表查找相应名字元素修改Education值 我帮添加些调试用