《結(jié)構(gòu)體共用體》課件_第1頁
《結(jié)構(gòu)體共用體》課件_第2頁
《結(jié)構(gòu)體共用體》課件_第3頁
《結(jié)構(gòu)體共用體》課件_第4頁
《結(jié)構(gòu)體共用體》課件_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

結(jié)構(gòu)體和共用體結(jié)構(gòu)體和共用體是C語言中兩種重要的數(shù)據(jù)結(jié)構(gòu),它們允許程序員將多個不同類型的數(shù)據(jù)組合成一個整體。結(jié)構(gòu)體和共用體在內(nèi)存管理、數(shù)據(jù)組織和代碼優(yōu)化方面發(fā)揮著重要作用。目錄結(jié)構(gòu)體定義訪問變量初始化函數(shù)嵌套數(shù)組指針匿名結(jié)構(gòu)體共用體定義訪問變量初始化函數(shù)嵌套數(shù)組指針匿名共用體比較區(qū)別應(yīng)用場景其他注意事項課后練習(xí)總結(jié)什么是結(jié)構(gòu)體?結(jié)構(gòu)體(struct)是一種用戶自定義的數(shù)據(jù)類型,它允許將不同類型的數(shù)據(jù)組合在一起,形成一個有機(jī)的整體。結(jié)構(gòu)體可以看作是自定義的數(shù)據(jù)結(jié)構(gòu),用于存儲和管理相互關(guān)聯(lián)的數(shù)據(jù)。定義結(jié)構(gòu)體的語法1關(guān)鍵字struct用于定義結(jié)構(gòu)體類型2結(jié)構(gòu)體名自定義結(jié)構(gòu)體的名稱3成員變量結(jié)構(gòu)體內(nèi)部的變量4分號定義結(jié)構(gòu)體類型的結(jié)束標(biāo)志例如,定義一個名為“Student”的結(jié)構(gòu)體,包含成員變量“name”、“age”和“score”,可以使用以下語法:structStudent{charname[20];intage;floatscore;};結(jié)構(gòu)體成員的訪問點運算符使用點運算符(.)訪問結(jié)構(gòu)體成員。例如,如果結(jié)構(gòu)體變量名為student,成員名為name,則可以使用訪問name成員。箭頭運算符使用箭頭運算符(->)訪問通過指針指向的結(jié)構(gòu)體成員。例如,如果結(jié)構(gòu)體指針名為pStudent,則可以使用pStudent->name訪問name成員。示例例如,以下代碼展示了如何使用點運算符和箭頭運算符訪問結(jié)構(gòu)體成員:structStudent{charname[50];intage;};intmain(){structStudentstudent={"張三",20};structStudent*pStudent=&student;printf("學(xué)生姓名:%s\n",);printf("學(xué)生年齡:%d\n",pStudent->age);return0;}結(jié)構(gòu)體變量的聲明1語法使用結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量。例如,聲明一個名為"student"的結(jié)構(gòu)體變量,類型為"structStudent"。2示例structStudentstudent;3初始化在聲明結(jié)構(gòu)體變量的同時,可以使用大括號初始化其成員。例如,將"student"變量的name成員初始化為"張三"。結(jié)構(gòu)體變量的初始化1直接初始化在聲明結(jié)構(gòu)體變量時直接賦值。2逐成員初始化使用點運算符為每個成員賦值。3初始化列表使用花括號將成員的值列出來。結(jié)構(gòu)體變量的初始化方法有三種:直接初始化、逐成員初始化和初始化列表。直接初始化在聲明變量時直接賦值。逐成員初始化使用點運算符為每個成員賦值。初始化列表使用花括號將成員的值列出來。結(jié)構(gòu)體變量作為函數(shù)參數(shù)傳遞結(jié)構(gòu)體變量將結(jié)構(gòu)體變量作為參數(shù)傳遞給函數(shù),函數(shù)可以通過結(jié)構(gòu)體變量的成員名訪問其成員。傳遞結(jié)構(gòu)體指針通過指針傳遞結(jié)構(gòu)體變量,可以節(jié)省內(nèi)存空間,提高代碼效率。修改結(jié)構(gòu)體成員在函數(shù)內(nèi)部,可以修改結(jié)構(gòu)體成員的值,這些修改會反映到原始結(jié)構(gòu)體變量中。結(jié)構(gòu)體變量作為函數(shù)返回值1函數(shù)定義聲明返回結(jié)構(gòu)體的函數(shù)2函數(shù)調(diào)用通過函數(shù)調(diào)用獲得結(jié)構(gòu)體3返回值函數(shù)返回結(jié)構(gòu)體變量結(jié)構(gòu)體變量作為函數(shù)返回值時,函數(shù)的返回值類型應(yīng)為結(jié)構(gòu)體類型。函數(shù)調(diào)用時,會將結(jié)構(gòu)體變量的內(nèi)容復(fù)制到函數(shù)調(diào)用處。結(jié)構(gòu)體的嵌套1定義嵌套結(jié)構(gòu)體可以在結(jié)構(gòu)體中定義另一個結(jié)構(gòu)體,形成嵌套結(jié)構(gòu)體。2訪問嵌套結(jié)構(gòu)體成員使用“.”運算符來訪問嵌套結(jié)構(gòu)體成員,例如:outer.inner.member。3應(yīng)用場景嵌套結(jié)構(gòu)體可以用來表示更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如描述一個學(xué)生的個人信息,包括姓名、年齡、性別以及地址。結(jié)構(gòu)體數(shù)組1定義多個結(jié)構(gòu)體變量的集合。2語法struct結(jié)構(gòu)體名數(shù)組名[數(shù)組大小];3訪問通過數(shù)組索引訪問。4應(yīng)用存儲多個同類型的數(shù)據(jù)。結(jié)構(gòu)體數(shù)組可以方便地存儲多個相同類型的結(jié)構(gòu)體數(shù)據(jù)??梢酝ㄟ^數(shù)組索引訪問數(shù)組中的每個結(jié)構(gòu)體變量。結(jié)構(gòu)體指針結(jié)構(gòu)體指針的定義結(jié)構(gòu)體指針指向結(jié)構(gòu)體變量的內(nèi)存地址。使用結(jié)構(gòu)體指針可以更有效地訪問和操作結(jié)構(gòu)體成員。例如,可以使用結(jié)構(gòu)體指針訪問結(jié)構(gòu)體成員,并修改結(jié)構(gòu)體變量的值。結(jié)構(gòu)體指針的使用我們可以使用結(jié)構(gòu)體指針指向結(jié)構(gòu)體變量,然后通過指針訪問結(jié)構(gòu)體成員,例如,使用結(jié)構(gòu)體指針訪問結(jié)構(gòu)體成員并進(jìn)行修改,使用結(jié)構(gòu)體指針傳遞結(jié)構(gòu)體變量作為函數(shù)參數(shù)。結(jié)構(gòu)體指針的優(yōu)勢結(jié)構(gòu)體指針提供了靈活的內(nèi)存訪問方式,能夠提高代碼效率和可讀性。同時,結(jié)構(gòu)體指針方便了結(jié)構(gòu)體變量在函數(shù)之間傳遞,并可以動態(tài)地創(chuàng)建和釋放結(jié)構(gòu)體內(nèi)存空間。匿名結(jié)構(gòu)體定義匿名結(jié)構(gòu)體是指沒有名字的結(jié)構(gòu)體,直接定義并使用。用途主要用于簡化代碼,避免重復(fù)定義結(jié)構(gòu)體名稱,提高代碼可讀性。實例將匿名結(jié)構(gòu)體作為函數(shù)參數(shù)或返回值,可以簡化代碼,提高效率。什么是共用體?11.內(nèi)存共享共用體成員共享同一個內(nèi)存空間,只允許一個成員在同一時間被使用。22.數(shù)據(jù)類型轉(zhuǎn)換共用體可以將不同數(shù)據(jù)類型的值存儲在同一個內(nèi)存位置,實現(xiàn)數(shù)據(jù)類型的靈活轉(zhuǎn)換。33.節(jié)省內(nèi)存空間共用體可以有效利用內(nèi)存空間,因為所有成員共享同一個內(nèi)存區(qū)域,從而減少內(nèi)存占用。定義共用體的語法1關(guān)鍵字union使用union關(guān)鍵字定義共用體。2類型聲明聲明共用體類型并指定成員變量類型。3成員變量定義成員變量,每個成員變量占用的內(nèi)存空間相同。共用體的語法類似于結(jié)構(gòu)體,區(qū)別在于關(guān)鍵字不同,共用體使用union關(guān)鍵字。共用體類型聲明后,需要定義成員變量類型,每個成員變量占據(jù)相同的內(nèi)存空間,因為它們共享同一塊內(nèi)存區(qū)域。共用體成員的訪問共用體變量中,所有成員共享相同的內(nèi)存空間。這意味著,在同一時間,只能訪問共用體的其中一個成員。1選擇成員使用成員名訪問2內(nèi)存訪問共用體成員共享同一內(nèi)存地址3最新值訪問最后賦值的成員共用體變量的聲明1語法共用體變量的聲明與結(jié)構(gòu)體變量類似,使用關(guān)鍵字union后跟共用體類型名,再跟變量名。2示例unionData{inti;floatf;charc;};unionDatadata;3內(nèi)存分配共用體變量只分配一個足夠大的內(nèi)存空間來容納所有成員中最大的成員。共用體變量的初始化直接初始化在聲明共用體變量時,可以同時對其進(jìn)行初始化。初始化值應(yīng)與共用體中第一個成員的類型一致。間接初始化可以使用賦值語句對共用體變量的成員進(jìn)行初始化。只有共用體變量中一個成員被初始化,其他成員的值將被覆蓋。結(jié)構(gòu)體成員初始化共用體變量的成員可以是結(jié)構(gòu)體類型。初始化結(jié)構(gòu)體成員時,需要遵循結(jié)構(gòu)體初始化的規(guī)則。共用體變量作為函數(shù)參數(shù)1傳遞共用體變量地址使用指針傳遞2函數(shù)內(nèi)部修改共用體值通過指針訪問成員3返回值為共用體類型函數(shù)返回共用體變量將共用體變量作為函數(shù)參數(shù)傳遞時,需要注意指針的使用。函數(shù)內(nèi)部可以通過指針訪問共用體成員,并修改共用體變量的值。此外,函數(shù)的返回值也可以是共用體類型,以便將共用體變量的值返回給調(diào)用函數(shù)。共用體變量作為函數(shù)返回值當(dāng)函數(shù)返回一個共用體變量時,實際上返回的是該共用體變量中當(dāng)前活動成員的值。1函數(shù)定義定義返回共用體類型的函數(shù)2函數(shù)調(diào)用調(diào)用函數(shù),獲取返回值3返回值傳遞將活動成員的值作為返回值傳遞4接收返回值接收函數(shù)返回的共用體值例如,如果函數(shù)返回一個包含int和char類型的共用體,而當(dāng)前活動成員是int類型,那么返回值將是該int類型的數(shù)值。共用體的嵌套1定義可以在共用體中定義其他共用體類型,形成嵌套結(jié)構(gòu)。嵌套的共用體成員共享相同的內(nèi)存空間。2訪問成員使用點運算符“.”訪問嵌套共用體的成員。例如,共用體A中包含共用體B,訪問B的成員需要使用A.B.成員名。3應(yīng)用嵌套的共用體可以用于表示復(fù)雜的結(jié)構(gòu),例如數(shù)據(jù)結(jié)構(gòu)中的節(jié)點。例如,一個節(jié)點可能包含一個數(shù)據(jù)部分和一個指向下一個節(jié)點的指針。共用體數(shù)組1定義聲明一個共用體類型的數(shù)組,每個元素都擁有共用體的所有成員。2內(nèi)存分配數(shù)組的所有元素共享同一內(nèi)存空間。3訪問通過數(shù)組下標(biāo)訪問每個元素的成員。4應(yīng)用存儲多種數(shù)據(jù)類型,節(jié)省內(nèi)存空間。例如,可以定義一個共用體數(shù)組來存儲不同類型的幾何圖形信息,例如圓形、矩形和三角形。由于這些幾何圖形的結(jié)構(gòu)不同,但它們都共享一些共同的屬性,例如位置和顏色,因此可以使用一個共用體來存儲它們。共用體指針1指針定義共用體指針指向共用體變量的內(nèi)存地址,可以像訪問普通指針一樣訪問共用體。2成員訪問通過指針訪問共用體成員時,需要先解引用指針,然后使用點運算符或箭頭運算符。3內(nèi)存管理共用體指針指向的內(nèi)存區(qū)域的大小取決于共用體中最大成員的大小,而不是所有成員大小之和。匿名共用體節(jié)省內(nèi)存匿名共用體可以節(jié)省內(nèi)存空間,因為多個成員共享同一個內(nèi)存地址。靈活使用匿名共用體可以根據(jù)需要使用不同的成員,提高代碼的靈活性。簡化代碼匿名共用體可以簡化代碼結(jié)構(gòu),提高代碼的可讀性和可維護(hù)性。結(jié)構(gòu)體和共用體的區(qū)別11.內(nèi)存分配結(jié)構(gòu)體為每個成員分配獨立的內(nèi)存空間,而共用體所有成員共享同一個內(nèi)存空間。22.數(shù)據(jù)存儲結(jié)構(gòu)體存儲多個不同類型的數(shù)據(jù),而共用體存儲多個數(shù)據(jù)類型中的一個,每次只能使用一個成員。33.成員訪問結(jié)構(gòu)體成員可以通過結(jié)構(gòu)體名加成員名的方式訪問,共用體成員可以通過共用體名加成員名的方式訪問。44.使用場景結(jié)構(gòu)體用于存儲多個相關(guān)數(shù)據(jù),共用體用于節(jié)省內(nèi)存空間或在同一內(nèi)存位置存放不同類型數(shù)據(jù)。結(jié)構(gòu)體和共用體的應(yīng)用場景數(shù)據(jù)存儲結(jié)構(gòu)體可以用于組織和管理不同類型的數(shù)據(jù),例如存儲學(xué)生信息,商品信息等。游戲開發(fā)結(jié)構(gòu)體可以用于存儲游戲角色屬性,例如生命值、攻擊力等。網(wǎng)絡(luò)編程共用體可以用于處理不同類型的網(wǎng)絡(luò)數(shù)據(jù)包,例如TCP、UDP數(shù)據(jù)包。圖形界面結(jié)構(gòu)體可以用于存儲窗口、按鈕等GUI元素的屬性和方法。注意事項類型匹配結(jié)構(gòu)體或共用體成員類型要與賦值語句中的變量類型匹配。內(nèi)存對齊結(jié)構(gòu)體和共用體成員在內(nèi)存中按照一定的規(guī)則對齊,以提高訪問效率。位域使用位域可以用來節(jié)省內(nèi)存空間,但使用時需要注意位域的大小和位置。指針使用使用結(jié)構(gòu)體或共用體指針時,需要確保指針指向的是有效的內(nèi)存地址。課后練習(xí)本節(jié)課的課后練習(xí)是為了鞏固結(jié)構(gòu)體和共用體的概念,并鼓勵你實踐。你將需要編寫代碼來解決具體的問題。你可以選擇編寫一個小型程序,或者完成一些簡單的代碼片段。例如,你可以嘗試編寫一個程序來管理學(xué)生信息,包括姓名、學(xué)號、成績等。你還可以編寫一個程序來模擬現(xiàn)實世界

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論