if中可以賦值給head的理由很簡單。

創新互聯建站專注于政和企業網站建設,響應式網站設計,商城網站開發。政和網站建設公司,為政和等地區提供建站服務。全流程按需搭建網站,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務
因為 if(PTScount(head) == 0)
if判斷的就是看它是不是 第一個元素。
如果是第一個元素,自然直接將ins賦值給head。
head所代表的就是第一個元素。
如果到了else這里,那么很明顯就不是第一個元素了。
那這個時候肯定就不可以直接復制給head了呀,因為head可是代表第一個元素呀。
所以,你這是肯定改不了的。
主函數里調用就像寫函數定義一樣,比如調用創建表的,就這樣:
#include?stdio.h
struct?Linklist?{?
...
};
typedef?Linklist*?LinkList;
int?CreateList(LinkList?LstMe)?{
...
}??
int?main()?{
LinkList?LstDemo?=?(LinkList)?malloc?(sizeof(Linklist));
CreateList(LstDemo);?//?調用建表
free?(LstDemo);
return?0;
}
1、添加頭文件"stdio.h"
2、struct student * creat(void),但是你的main函數中返回接收卻是用的int*類型。
3、主函數main應當明確聲明為void main()
4、最為嚴重的是:struct student * creat(void) 函數體中使用了局部變量struct student *head; struct student *p1,*p2; 但是函數結束的地方卻要返回這些指針,因此返回的值是無效數據。返回時,已經不再作用域了,是無效的空間。建議把這些數據當作輸入參數,指針類型的。就可以正確的接收分配的struct student空間以及指針了。
5、struct student * creat(void) 函數體中,臨時指針*p1、*p2再函數返回之前應當設置為NULL,避免因為局部變量的作用域結束導致相關的空間被清除。
總之,我建議把struct student * creat(void)定義修改為:
void creat(struct student **head).
以上內容經過調試,可以使用。
==================我的程序,經過完整的調試
#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
void creat(struct student **head) /*定義函數,此函數帶回一個指向鏈表頭的指針*/
{
struct student *p1,*p2;
n=0;
do
{
p1=(struct student *)malloc(LEN); /*開辟一個新單元*/
p1-next=NULL;
scanf("%ld,%f",p1-num,p1-score);
if(p1-num==0)
break;
n++;
if(n==1)
*head=p1;
else
p2-next=p1;
p2=p1;
} while(p1-num!=0) ;
p1=NULL;
p2=NULL;
}
void main()
{
struct student *p;
creat(p);
if(p!=NULL)
do
{
printf("%ld %5.1f\n",p-num,p-score);
p=p-next;
}while(p!=NULL);
flushall(); //清除鍵盤緩沖區,避免輸入混淆
getchar(); //等待鍵盤任意輸入,以便觀察運算結果
}
看我的回答怎么樣?
網站欄目:c語言鏈式結構定義函數 c語言鏈式編程
當前路徑:http://www.yijiale78.com/article40/hihieo.html
成都網站建設公司_創新互聯,為您提供定制開發、網站策劃、網站維護、微信小程序、、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯