freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

結(jié)構(gòu)體與共用體ppt課件-資料下載頁

2025-01-19 23:52本頁面
  

【正文】 } /*使 p0指向的結(jié)點作為頭結(jié)點 */ else {while((p0nump1num) amp。amp。 (p1next!=NULL)) {p2=p1。 /*使 p2指向剛才 p1指向的結(jié)點 */ p1=p1next。} /*p1后移一個結(jié)點 */ if(p0num< p1num) {if(head==p1) head=p0。 / 插到原來第一個結(jié)點之前 */ else p2next=p0。 / 插到 p2指向的結(jié)點之后 */ p0next=p1; } else {p1next=p0。 p0next=NULL。}}/*插到最后的結(jié)點之后 */ n=n+1; / 結(jié)點數(shù)加 1*/ return(head); } 函數(shù)參數(shù)是 head和 stud。 stud也是一個指針變量,從實參傳來待插入結(jié)點的地址給 stud。語句p0=stud的作用是使 p0指向待插入的結(jié)點。函數(shù)類型是指針類型,函數(shù)值是鏈表起始地址 head。 對鏈表的綜合操作 將以上建立、輸出、刪除、插入的函數(shù)組織在一個C程序中,即將例 ~ 4個函數(shù)順序排列,用 main函數(shù)作主調(diào)函數(shù)。可以寫出以下 main函數(shù) (main函數(shù)的 位置在以上各函數(shù)的后面 )。 main() {struct student *head, stu; long delnum; printf(input records: \n); head=creat(); / 返回頭指針 */ print(head); / 輸出全部結(jié)點 */ printf(\ninput the deleted number: ); scanf(%ld, amp。delnum); / 輸入要刪除的學(xué)號 */ head=del(head, delnum); / 刪除后鏈表的頭/ print(head); / 輸出全部結(jié)點 */ printf(\ninput the inserted record:)。 / 輸入要插入的結(jié)點 */ scanf(%ld, %f, amp。stu. num, amp。stu. score); head=insert(head, amp。stu); / / print(head); /*輸出全部結(jié)點 */ } 此程序運行結(jié)果是正確的。它只刪除一個結(jié)點,插入一個結(jié)點。但如果想再插入一個結(jié)點,重復(fù)寫上程序最后 4行,共插入兩個結(jié)點。運行結(jié)果卻是錯誤的。 運行結(jié)果如下: input records: (建立鏈表 ) 99101, 90 99103, 98 99105. 76 0, 0 Now, These 3 records are: 99101 90. 0 99103 98. 0 99105 76. 0 input the deleted number: 99103 (刪除 ) delete: 99103 Now, These 2 records are: 99101 90. 099105 76. 0 input the inserted record: 99102, 90 (插入第一個結(jié)點 ) Now, These 3 records are: 99101 90. 0 99102 90. 0 99105 76. 0 input the inserted record: 89104, 99 (插入第二個結(jié)點 ) Now, These 4 records are: 99101 90. 0 99104 99. 0 99104 99. 0 99104 99. 0 … (無終止地輸出 99104的結(jié)點數(shù)據(jù) ) 出現(xiàn)以上結(jié)果的原因是 stu是一個有固定地址的結(jié)構(gòu)體變量。第一次把 stu結(jié)點插入到鏈表中。第二次若再用它來插入第二個結(jié)點,就把第一次結(jié)點的數(shù)據(jù)沖掉了。實際上并沒有開辟兩個結(jié)點。 main 函數(shù)如下: main() {struct student *head, *stu; long delnum; printf(input records: \n); head=creat(); print(head); printf(\ninput the deleted number: ); scanf(%ld, amp。delnum); while(delnum! =0) {head=del(head, delnum); print(head); printf(input the deleted number: ); scanf(%ld, amp。delnum); } printf(\ninput the inserted record: ); stu=(struct student )malloc(LEN); scanf(%ld, %f, amp。stu> num, amp。stu> score); while(stu> num! =0) {head=insert(head, stu); print(head); printf(input the inserted record: ); stu=(struct student )malloc(LEN); scanf(%ld, %f, amp。stu> num, amp。stu>score); } } stu定義為指針變量,在需要插入時先用 malloc函數(shù)開辟一個內(nèi)存區(qū),將其起始地址經(jīng)強制類型轉(zhuǎn)換后賦給 stu,然后輸入此結(jié)構(gòu)體變量中各成員的值。對不同的插入對象, stu的值是不同的,每次指向一個新的 struct student變量。在調(diào)用 insert函數(shù)時,實參為 head和 stu,將已建立的鏈表起始地址傳給insert函數(shù)的形參,將 stu(即新開辟的單元 的地址 )傳給形參 stud,返回的函數(shù)值是經(jīng)過插入之后的鏈表的頭指針 (地址 )。 運行情況如下: input records: 99101, 99 99103, 87 99105, 77 0, 0 Now, These 3 records are: 9910199. 0 99103 87. 0 99105 77. 0 input the deleted number: 99103 delete: 99103 Now, these 2 records are: 99101 99. 099105 77. 0 input the deleted number: 99105 delete: 99105 Now, These 1 records are: 99101 99. 0 input the deleted number: 0 input the inserted record: 99104, 87 Now, These 2 records are: 99101 99. 0 99104 87. 0 input the inserted record: 99106, 65 Now, These 3 records are: 99101 99. 0 99104 87. 0 99106 65. 0 input the inserted record: 0, 0 共用體 共用體的概念 有時需要使幾種不同類型的變量存放到同一段內(nèi)存單元中。例如,可把一個整型變量、一個字符型變量、一個實型變量放在同一個地址開始的內(nèi)存單元中 (見圖 )。以上 3個變量在內(nèi)存中占的字節(jié)數(shù)不同,但都從同一地址開始 (圖中設(shè)地址為1000)存放。也就是使用覆蓋技術(shù),幾個變量互相覆蓋。這種使幾個不同的變量共占同一段內(nèi)存的結(jié)構(gòu),稱為“共用體”類型的結(jié)構(gòu)。 定義共用體類型變量的一般形式為 union 共用體名 圖 { 成員表列 }變量表列; 例如: union data {int i; char ch; float f; }a, b, c; 也可以將類型聲明與變量定義分開: union data {int i; char ch; float f; }; union data a, b, c; 即先聲明一個 union data類型,再將 a、 b、 c定義為union data類型。當(dāng)然也可以直接定義共用體變量,如: union {int i; char ch; float f; }a, b, c; 可以看到,“共用體”與“結(jié)構(gòu)體”的定義形式相似。但它們的含義是不同的。 結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個成員分別占有其自己的內(nèi)存單元。 有些 C變量所占的內(nèi)存長度等于最長的成員的長度。例如,上面定義的“共用體”變量 a、 b、 c各占 4個字節(jié)(因為一個實型變量占 4個字節(jié) ),而不是各占 2+1+4=7個字節(jié)。 共用體變量的引用方式 只有先定義了共用體變量才能引用它。而且不能引用共用體變量,而只能引用共用體變量中的成員。例如,前面定義了 a、 b、 c為共用體變量,下面的引用方式是正確的: a. i(引用共用體變量中的類型變量 i) a. ch(引用共用體變量中的字符變量 ch) a. f (引用共用體變量中的實型變量 f) 不能只引用共用體變量,例如: printf(%d, a) 是錯誤的, a的存儲區(qū)有好幾種類型,分別占不同長度的存儲區(qū),僅寫共用體變量名 a,難以使系統(tǒng) 確定究竟輸出的是哪一個成員的值。應(yīng)該寫成printf(%d, a. i)或 printf(%c, a. ch)等。 共用體類型數(shù)據(jù)的特點 在使用共用體類型數(shù)據(jù)時要注意以下一些特點: (1) 同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時只能存放其中一種,而不是同時存放幾種。也就是說,每一瞬時只有一個成員起作用,其他的成員不起作用,即不是同時都存在和起作用。 (2) 共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就失去作用。如有以下賦值語句: a. i=1; a. c=39。a39。; a. f=1. 5; 在完成以上 3個賦值運算以后,只有 a. f是有效的,a. i和 a. c已經(jīng)無意義了。此時用 printf(%d,a. i)是不行的,而用 printf(%f, a. f)是可以的,因為最后一次的賦值是向 a. f賦值。因此在引用共用體變量時應(yīng)十分注意當(dāng)前存放在共用體變量中的究竟是哪個成員。 (3) 共用體變量的地址和它的各成員的地址都是同一地址。例如: amp。a、 amp。a. i、 amp。a. c、 amp。a. f都是同一地址值,其原因是顯然的。 (4) 不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值,又不能在定義共用體變量時對它初始化。例如,下面這些都是不對的: ① union {int i; char ch; float f; }a={1, 39。a39。, 1. 5}; (不能初始化 ) ② a=1; (不能對共用體變量賦值 ) ③ m=a; (不能引用共用體變量名以得到一個值 ) (5) 不能把共用體變量作為函數(shù)參數(shù),也不能使函數(shù)帶回共用體變量,但可以使用指向共用體變量的指針 (與結(jié)構(gòu)體變量這種用法相仿 )。 (6) 共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共用體的成員。 例 ,其中有學(xué)
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1