




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C/c+語語言言程程序序設設計計 復習結構體和指針等內容復習結構體和指針等內容C/c+語語言言程程序序設設計計 一、一、 指針指針1 1、變量與地址、變量與地址程序中: int i; float k; 內存中每個字節(jié)有一個編號-地址.2000200120022005內存02003ik 編譯或函數(shù)調用時為其分配內存單元編譯或函數(shù)調用時為其分配內存單元變量變量是對程序中數(shù)據(jù)是對程序中數(shù)據(jù)存儲空間的抽象存儲空間的抽象C/c+語語言言程程序序設設計計 .2000200420062005整型變量整型變量i10變量i_pointer2001200220032 2、指針與指針變量、指針與指針變量指針:指針:
2、一個變量的地址指針變量:指針變量:專門存放變量地址的變量叫指針變量2000指針指針變量指針變量 變量的變量的內容內容 變量的變量的地址地址指針變量指針變量變量變量變量地址變量地址(指針指針)變量值變量值指指向向地址存入地址存入指針變量指針變量C/c+語語言言程程序序設設計計 3、直接訪問與間接訪問、直接訪問與間接訪問 直接訪問:直接訪問:按變量地址存取變量值 間接訪問:間接訪問:通過存放變量地址的變量去訪問變量例 i=3; -直接訪問指針變量指針變量.2000200420062005整型變量整型變量i10變量變量i_pointer20012002200320003例例 *i_pointer=2
3、0; -間接訪問間接訪問20C/c+語語言言程程序序設設計計 指針變量指針變量.2000200420062005整型變量整型變量i10變量變量i_pointer2001200220032000整型變量整型變量k例例 k=i; -直接訪問直接訪問 k=*i_pointer; -間接訪問間接訪問10例例 k=i; k=*i_pointer; C/c+語語言言程程序序設設計計 4、指針變量、指針變量 指針變量指針變量與其與其所指向的變量所指向的變量之間的關系之間的關系指針變量的定義指針變量的定義一般形式:一般形式: 存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 *指針名;指針名;3變量變量i2000i_poi
4、nter*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33變量變量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法標識符合法標識符指針變量本身的存儲類型指針變量本身的存儲類型指針的目標變量的數(shù)據(jù)類型指針的目標變量的數(shù)據(jù)類型表示定義指針變量表示定義指針變量不是不是*運算符運算符例例 int *p1,*p2; float *q ; static char *name;注意:注意:1、在、在int *p1, *p2定義中,定義中,指針變量名是指針變量名是p1
5、,p2 ,不是不是*p1,*p22、指針變量只能指向定義時所規(guī)定類型的變量指針變量只能指向定義時所規(guī)定類型的變量3、指針變量定義后,、指針變量定義后,變量值不確定變量值不確定,應用前必須先賦值,應用前必須先賦值C/c+語語言言程程序序設設計計 二、結構體二、結構體. .結構體類型定義結構體類型定義結構體是結構體是一種構造數(shù)據(jù)類型一種構造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體,用途:把不同類型的數(shù)據(jù)組合成一個整體,是一種自定義數(shù)據(jù)類型是一種自定義數(shù)據(jù)類型struct 結構體名結構體名 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名成員名; .;成員類型可以是基本型或構
6、造型struct是關鍵字,不能省略合法標識符可省:無名結構體結構體類型可以定義在函數(shù)內,也可以結構體類型可以定義在函數(shù)內,也可以定義在函數(shù)外(作用域問題)定義在函數(shù)外(作用域問題)C/c+語語言言程程序序設設計計 例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).結構體類型定義描述結構結構體類型定義描述結構的組織形式的組織形式,不分配內存不分配內存結構體類結構體類型標識符型標識符C/c+語
7、語言言程程序序設設計計 2.2.結構體類型變量定義結構體類型變量定義1) 先定義結構體類型,再定義結構體變量先定義結構體類型,再定義結構體變量一般形式:一般形式: struct 結構體名結構體名 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .;struct 結構體名結構體名 變量名表列變量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; ; struct student stu1,stu10,*p; C/c+語
8、語言言程程序序設設計計 2)定義結構體類型的同時定義結構體變量)定義結構體類型的同時定義結構體變量一般形式:一般形式:struct 結構體名結構體名 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .變量名表列變量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; C/c+語語言言程程序序設設計計 3) 直接定義結構體變量直接定義結構體變量一般形式一般形式:struct 類型標識符類型標
9、識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .變量名表列變量名表列;例 struct short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; 用用無名結構體無名結構體直接定義直接定義變量變量只能一次只能一次C/c+語語言言程程序序設設計計 3 3 結構體變量的初始化結構體變量的初始化形式一:形式一:struct 結構體名結構體名 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .;struct 結構體名結構體名
10、結構體變量結構體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;C/c+語語言言程程序序設設計計 形式二形式二:struct 結構體名結構體名 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .結構體變量結構體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct student int num; char name20; char
11、sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; C/c+語語言言程程序序設設計計 形式三:形式三:struct 類型標識符類型標識符 成員名;成員名; 類型標識符類型標識符 成員名;成員名; .結構體變量結構體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; C/c+語語言言程程序序設設計計 說明:說明:
12、結構體類型與結構體變量概念不同結構體類型與結構體變量概念不同 類型類型:不分配內存;不分配內存; 變量變量:分配內存分配內存 類型類型:不能賦值、存取、運算不能賦值、存取、運算; 變量變量:可以可以 結構體可嵌套結構體可嵌套 結構體成員名與程序中變量名可相同,不會混淆結構體成員名與程序中變量名可相同,不會混淆例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct
13、student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyearC/c+語語言言程程序序設設計計 3. 3.結構體變量的引用結構體變量的引用 引用規(guī)則:引用規(guī)則: 結構體變量成員具備和普通變量相同的性質結構體變量成員具備和普通變量相同的性質 引用運算符:引用運算符:結構體變量名結構體變量名.成員名成員名 指向運算符:指向運算符:結構體變量名結構體變量名-成員名成員名 可以將一個結構體變量賦值給另一個結構體變量可以將一個結構體變量賦值給
14、另一個結構體變量 結構體嵌套時逐級引用結構體嵌套時逐級引用 例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,*p=&stu1; stu1.num=10; stu1.score=85.5;p-sex=F;例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1;numnamebirthdaymonthdayyearstu1.
15、birthday.month=12;C/c+語語言言程程序序設設計計 4 4 結構體數(shù)組結構體數(shù)組1)結構體數(shù)組的定義的三種形式:)結構體數(shù)組的定義的三種形式:形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;numnamesexagenumnamesexagestu0stu125B形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; c
16、har sex; int age; stu2;C/c+語語言言程程序序設設計計 2)結構體數(shù)組初始化和引用)結構體數(shù)組初始化和引用初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時維數(shù)可省struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 101
17、02,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1C/c+語語言言程程序序設設計計 三、內存的動態(tài)分配三、內存的動態(tài)分配1.動態(tài)內存分配動態(tài)內存分配 動態(tài)內存分配的目的動態(tài)內存分配的目的 在執(zhí)行過程中為數(shù)據(jù)對象分配合適的存儲空間在執(zhí)行過程中為數(shù)據(jù)對象分配合適的存儲空間 動態(tài)內存分配的使用場合動態(tài)內存分配的使用場合 不能在執(zhí)行前確定數(shù)據(jù)對象的存儲空間大小不能在執(zhí)行前確定數(shù)據(jù)對象的存儲空間大小
18、 不適合在執(zhí)行前為數(shù)據(jù)對象分配存儲空間不適合在執(zhí)行前為數(shù)據(jù)對象分配存儲空間 動態(tài)內存分配函數(shù):動態(tài)內存分配函數(shù):“stdlib.h” 或或 “malloc.h” void * malloc( unsigned int size ); void free( void* memblock ); C/c+語語言言程程序序設設計計 有需要再分配,不需要不分配有需要再分配,不需要不分配 有分配就有釋放有分配就有釋放 malloc() 與與 free() 一般在程序代碼的相同層次成一般在程序代碼的相同層次成對出現(xiàn)對出現(xiàn) 構造復雜數(shù)據(jù)結構時動態(tài)存儲分配非常有用構造復雜數(shù)據(jù)結構時動態(tài)存儲分配非常有用關于動態(tài)內
19、存分配的說明關于動態(tài)內存分配的說明C/c+語語言言程程序序設設計計 四、typedef定義類型 功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type name;類型定義語句關鍵字已有數(shù)據(jù)類型名用戶定義的類型名例 typedef int INTEGER;例 typedef float REAL;類型定義后,與已有類型一樣使用例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 說明說明: :1.typedef 1.typedef 沒有創(chuàng)造沒有創(chuàng)造新數(shù)據(jù)類型新數(shù)據(jù)類型2.2.typedef typedef 是定義類型
20、是定義類型, ,不能定義變量不能定義變量3.typedef 3.typedef 與與 define define 不同不同 definedefine typedeftypedef預編譯時處理預編譯時處理 編譯時處理編譯時處理簡單字符置換簡單字符置換 為已有類型命名為已有類型命名 C/c+語語言言程程序序設設計計 例例 typedef struct club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub; GROUPGROUP為結構體類型為結構體類型PGPG為指向為指向GROUPGROUP的指針類型的指針類
21、型例 定義數(shù)組類型typedef int ARRAY100; ARRAY a,b,c; int a100,b100,c100;例 定義指針類型typedef char *STRING; STRING p,s10; char *p; char *s10;C/c+語語言言程程序序設設計計 五、c+中的引用1. 引用的概念 建立引用的作用是為變量另起一個名字,變量的引用通常被認為是變量的別名。 聲明一個引用的格式如下: 類型類型 & & 引用名引用名 = = 已定義的變量名已定義的變量名; ; 例如: int i=5; int &j = i; 這里,聲明了一個整數(shù)類型的引用j
22、 ,用整型變量i對它進行初始化,這時j就可看做是變量i的引用,即是變量i的別名。也就是說,變量i和引用j占用內存的同一位置。當i變化時,j也隨之變化,反之亦然。引用運算符C/c+語語言言程程序序設設計計 例例 變量和引用的關系。變量和引用的關系。#include#includeusing namespace std;using namespace std;int main()int main() int i; int i; int &j=i;int &j=i; /聲明聲明j j是一個整型變量是一個整型變量i i的引用的引用 /這時這時j j就可看作是變量就可看作是變量i i的別
23、名的別名 i=30;i=30; couti=i j=jn; /couti=i j=jn; /輸出變量輸出變量i i和引用和引用j j的值的值 j=80;j=80; couti=i j=jn; /couti=i j=jn; /輸出變量輸出變量i i和引用和引用j j的值的值 coutcout變量變量i i的地址的地址:& &i in;n;/輸出變量輸出變量i i的地址的地址 coutcout引用引用j j的地址的地址:& &j jn;n;/輸出引用輸出引用j j的地址的地址 return 0;return 0; 程序執(zhí)行結果如下: i=30 j=30i=80 j=
24、80變量i的地址:0012FF7C引用j的地址:0012FF7C注意,此地址視實際系統(tǒng)的運行而有所不同。 C/c+語語言言程程序序設設計計 說明: (1) 對變量聲明一個引用,編譯系統(tǒng)不給它單獨分配存儲單元,i和j都代表同一變量單元。 (2)在聲明一個引用時,必須立即對它進行初始化,即聲明它代表哪一個變量。不能聲明完成后再賦值。 例如下述聲明是錯誤的。 int i; int &j; /錯誤 j=i; 應該是:int i;int &j=i;C/c+語語言言程程序序設設計計 (3) 為引用提供的初始值,可以是一個變量或另一個引用。例如: int i=5; /定義整型變量i int
25、&j1=i; /聲明j1是整型變量i的引用(別名) int &j2=j1; /聲明j2是整型引用j1的引用(別名)這樣定義后,變量i有兩個別名:j1和j2。 (4) 指針是通過地址間接訪問某個變量,需要書寫間接運算符“*”; 引用是通過別名直接訪問某個變量。 每次使用引用時,可以不用書寫間接運算符“*”,因而使用引用可以簡化程序。C/c+語語言言程程序序設設計計 例例 比較引用和指針的使用方法。比較引用和指針的使用方法。#include#includeusing namespace std;using namespace std;int main()int main() int
26、 i=15; / int i=15; /定義整型變量定義整型變量i,i,賦初值為賦初值為1515 int int * *iptr=&i;iptr=&i; / /定義指針變量定義指針變量iptr,iptr,將變量將變量i i的地址賦給的地址賦給iptriptr int &rptr=i;int &rptr=i; / /聲明變量聲明變量i i的引用的引用rptr,rptrrptr,rptr是變量是變量i i的別名的別名 couti is couti is i iendl; /endl; /輸出輸出i i的值的值 coutcout* *iptr is iptr is *
27、 *iptriptrendl; /endl; /輸出輸出* *iptriptr的值的值 coutrptr is coutrptr is rptrrptrendl; /endl; /輸出輸出rptrrptr的值的值 return 0;return 0; 運行結果如下:運行結果如下:i is 15i is 15* *iptr is 15iptr is 15rptr is 15rptr is 15 從這個程序可以看出從這個程序可以看出, ,如果要如果要使用指針變量使用指針變量iptriptr所指的變量所指的變量i,i,必須用必須用“* *”來間接引用指針來間接引用指針; ;而而使用引用使用引用rptrrptr所代表的變量所代表的變量i,i,不不必書寫間接引用運算符必書寫間接引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3-3編碼器1電子課件教學版
- 糧食倉儲企業(yè)綠色稅收政策考核試卷
- 玻璃管道生產(chǎn)考核試卷
- 油氣倉儲與能源安全風險管理體系構建策略研究考核試卷
- 殘疾人座車內飾設計與材料選擇考核試卷
- 游樂設施施工電氣安全知識考核試卷
- 電氣設備數(shù)字化設計與制造考核試卷
- 電機專利技術考核試卷
- 竹漿在紙品印刷適應性改進的技術研究考核試卷
- 紗線國際貿易的風險防范考核試卷
- 2025年湖南韶旅集團招聘筆試參考題庫含答案解析
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
- 新疆維吾爾自治區(qū)保障性住房建設標準(正文)
- 護士角色的轉換與適應
- 檔案袋密封條模版
- 樁基托梁擋土墻施工方案
- 《中學思想政治學科教學論》課程教學大綱
- 常用CMYK色值表大全
- 混凝土構件之梁配筋計算表格(自動版)
- 自制飲品操作流程
- 碳纖維預浸料項目可行性研究報告-用于立項備案
評論
0/150
提交評論