復(fù)習(xí)結(jié)構(gòu)體與指針+引用_第1頁
復(fù)習(xí)結(jié)構(gòu)體與指針+引用_第2頁
復(fù)習(xí)結(jié)構(gòu)體與指針+引用_第3頁
復(fù)習(xí)結(jié)構(gòu)體與指針+引用_第4頁
復(fù)習(xí)結(jié)構(gòu)體與指針+引用_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C/c+語語言言程程序序設(shè)設(shè)計計 復(fù)習(xí)結(jié)構(gòu)體和指針等內(nèi)容復(fù)習(xí)結(jié)構(gòu)體和指針等內(nèi)容C/c+語語言言程程序序設(shè)設(shè)計計 一、一、 指針指針1 1、變量與地址、變量與地址程序中: int i; float k; 內(nèi)存中每個字節(jié)有一個編號-地址.2000200120022005內(nèi)存02003ik 編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元變量變量是對程序中數(shù)據(jù)是對程序中數(shù)據(jù)存儲空間的抽象存儲空間的抽象C/c+語語言言程程序序設(shè)設(shè)計計 .2000200420062005整型變量整型變量i10變量i_pointer2001200220032 2、指針與指針變量、指針與指針變量指針:指針:

2、一個變量的地址指針變量:指針變量:專門存放變量地址的變量叫指針變量2000指針指針變量指針變量 變量的變量的內(nèi)容內(nèi)容 變量的變量的地址地址指針變量指針變量變量變量變量地址變量地址(指針指針)變量值變量值指指向向地址存入地址存入指針變量指針變量C/c+語語言言程程序序設(shè)設(shè)計計 3、直接訪問與間接訪問、直接訪問與間接訪問 直接訪問:直接訪問:按變量地址存取變量值 間接訪問:間接訪問:通過存放變量地址的變量去訪問變量例 i=3; -直接訪問指針變量指針變量.2000200420062005整型變量整型變量i10變量變量i_pointer20012002200320003例例 *i_pointer=2

3、0; -間接訪問間接訪問20C/c+語語言言程程序序設(shè)設(shè)計計 指針變量指針變量.2000200420062005整型變量整型變量i10變量變量i_pointer2001200220032000整型變量整型變量k例例 k=i; -直接訪問直接訪問 k=*i_pointer; -間接訪問間接訪問10例例 k=i; k=*i_pointer; C/c+語語言言程程序序設(shè)設(shè)計計 4、指針變量、指針變量 指針變量指針變量與其與其所指向的變量所指向的變量之間的關(guān)系之間的關(guān)系指針變量的定義指針變量的定義一般形式:一般形式: 存儲類型存儲類型 數(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合法標(biāo)識符合法標(biāo)識符指針變量本身的存儲類型指針變量本身的存儲類型指針的目標(biāo)變量的數(shù)據(jù)類型指針的目標(biāo)變量的數(shù)據(jù)類型表示定義指針變量表示定義指針變量不是不是*運算符運算符例例 int *p1,*p2; float *q ; static char *name;注意:注意:1、在、在int *p1, *p2定義中,定義中,指針變量名是指針變量名是p1

5、,p2 ,不是不是*p1,*p22、指針變量只能指向定義時所規(guī)定類型的變量指針變量只能指向定義時所規(guī)定類型的變量3、指針變量定義后,、指針變量定義后,變量值不確定變量值不確定,應(yīng)用前必須先賦值,應(yīng)用前必須先賦值C/c+語語言言程程序序設(shè)設(shè)計計 二、結(jié)構(gòu)體二、結(jié)構(gòu)體. .結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體是結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體,用途:把不同類型的數(shù)據(jù)組合成一個整體,是一種自定義數(shù)據(jù)類型是一種自定義數(shù)據(jù)類型struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名成員名; .;成員類型可以是基本型或構(gòu)

6、造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體結(jié)構(gòu)體類型可以定義在函數(shù)內(nèi),也可以結(jié)構(gòu)體類型可以定義在函數(shù)內(nèi),也可以定義在函數(shù)外(作用域問題)定義在函數(shù)外(作用域問題)C/c+語語言言程程序序設(shè)設(shè)計計 例 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é).結(jié)構(gòu)體類型定義描述結(jié)構(gòu)結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式的組織形式,不分配內(nèi)存不分配內(nèi)存結(jié)構(gòu)體類結(jié)構(gòu)體類型標(biāo)識符型標(biāo)識符C/c+語

7、語言言程程序序設(shè)設(shè)計計 2.2.結(jié)構(gòu)體類型變量定義結(jié)構(gòu)體類型變量定義1) 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:一般形式: struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名表列變量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; ; struct student stu1,stu10,*p; C/c+語

8、語言言程程序序設(shè)設(shè)計計 2)定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量)定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:一般形式:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .變量名表列變量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; C/c+語語言言程程序序設(shè)設(shè)計計 3) 直接定義結(jié)構(gòu)體變量直接定義結(jié)構(gòu)體變量一般形式一般形式:struct 類型標(biāo)識符類型標(biāo)

9、識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .變量名表列變量名表列;例 struct short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; 用用無名結(jié)構(gòu)體無名結(jié)構(gòu)體直接定義直接定義變量變量只能一次只能一次C/c+語語言言程程序序設(shè)設(shè)計計 3 3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化形式一:形式一:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名

10、結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(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+語語言言程程序序設(shè)設(shè)計計 形式二形式二:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(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+語語言言程程序序設(shè)設(shè)計計 形式三:形式三:struct 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; 類型標(biāo)識符類型標(biāo)識符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(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+語語言言程程序序設(shè)設(shè)計計 說明:說明:

12、結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型類型:不分配內(nèi)存;不分配內(nèi)存; 變量變量:分配內(nèi)存分配內(nèi)存 類型類型:不能賦值、存取、運算不能賦值、存取、運算; 變量變量:可以可以 結(jié)構(gòu)體可嵌套結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆例 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+語語言言程程序序設(shè)設(shè)計計 3. 3.結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用 引用規(guī)則:引用規(guī)則: 結(jié)構(gòu)體變量成員具備和普通變量相同的性質(zhì)結(jié)構(gòu)體變量成員具備和普通變量相同的性質(zhì) 引用運算符:引用運算符:結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名 指向運算符:指向運算符:結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名-成員名成員名 可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量可以將一個結(jié)構(gòu)體變量賦值給

14、另一個結(jié)構(gòu)體變量 結(jié)構(gòu)體嵌套時逐級引用結(jié)構(gòu)體嵌套時逐級引用 例例 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+語語言言程程序序設(shè)設(shè)計計 4 4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組1)結(jié)構(gòu)體數(shù)組的定義的三種形式:)結(jié)構(gòu)體數(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+語語言言程程序序設(shè)設(shè)計計 2)結(jié)構(gòu)體數(shù)組初始化和引用)結(jié)構(gòu)體數(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+語語言言程程序序設(shè)設(shè)計計 三、內(nèi)存的動態(tài)分配三、內(nèi)存的動態(tài)分配1.動態(tài)內(nèi)存分配動態(tài)內(nèi)存分配 動態(tài)內(nèi)存分配的目的動態(tài)內(nèi)存分配的目的 在執(zhí)行過程中為數(shù)據(jù)對象分配合適的存儲空間在執(zhí)行過程中為數(shù)據(jù)對象分配合適的存儲空間 動態(tài)內(nèi)存分配的使用場合動態(tài)內(nèi)存分配的使用場合 不能在執(zhí)行前確定數(shù)據(jù)對象的存儲空間大小不能在執(zhí)行前確定數(shù)據(jù)對象的存儲空間大小

18、 不適合在執(zhí)行前為數(shù)據(jù)對象分配存儲空間不適合在執(zhí)行前為數(shù)據(jù)對象分配存儲空間 動態(tài)內(nèi)存分配函數(shù):動態(tài)內(nèi)存分配函數(shù):“stdlib.h” 或或 “malloc.h” void * malloc( unsigned int size ); void free( void* memblock ); C/c+語語言言程程序序設(shè)設(shè)計計 有需要再分配,不需要不分配有需要再分配,不需要不分配 有分配就有釋放有分配就有釋放 malloc() 與與 free() 一般在程序代碼的相同層次成一般在程序代碼的相同層次成對出現(xiàn)對出現(xiàn) 構(gòu)造復(fù)雜數(shù)據(jù)結(jié)構(gòu)時動態(tài)存儲分配非常有用構(gòu)造復(fù)雜數(shù)據(jù)結(jié)構(gòu)時動態(tài)存儲分配非常有用關(guān)于動態(tài)內(nèi)

19、存分配的說明關(guān)于動態(tài)內(nèi)存分配的說明C/c+語語言言程程序序設(shè)設(shè)計計 四、typedef定義類型 功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type name;類型定義語句關(guān)鍵字已有數(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預(yù)編譯時處理預(yù)編譯時處理 編譯時處理編譯時處理簡單字符置換簡單字符置換 為已有類型命名為已有類型命名 C/c+語語言言程程序序設(shè)設(shè)計計 例例 typedef struct club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub; GROUPGROUP為結(jié)構(gòu)體類型為結(jié)構(gòu)體類型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+語語言言程程序序設(shè)設(shè)計計 五、c+中的引用1. 引用的概念 建立引用的作用是為變量另起一個名字,變量的引用通常被認(rèn)為是變量的別名。 聲明一個引用的格式如下: 類型類型 & & 引用名引用名 = = 已定義的變量名已定義的變量名; ; 例如: int i=5; int &j = i; 這里,聲明了一個整數(shù)類型的引用j

22、 ,用整型變量i對它進(jìn)行初始化,這時j就可看做是變量i的引用,即是變量i的別名。也就是說,變量i和引用j占用內(nèi)存的同一位置。當(dāng)i變化時,j也隨之變化,反之亦然。引用運算符C/c+語語言言程程序序設(shè)設(shè)計計 例例 變量和引用的關(guān)系。變量和引用的關(guān)系。#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í)行結(jié)果如下: i=30 j=30i=80 j=

24、80變量i的地址:0012FF7C引用j的地址:0012FF7C注意,此地址視實際系統(tǒng)的運行而有所不同。 C/c+語語言言程程序序設(shè)設(shè)計計 說明: (1) 對變量聲明一個引用,編譯系統(tǒng)不給它單獨分配存儲單元,i和j都代表同一變量單元。 (2)在聲明一個引用時,必須立即對它進(jìn)行初始化,即聲明它代表哪一個變量。不能聲明完成后再賦值。 例如下述聲明是錯誤的。 int i; int &j; /錯誤 j=i; 應(yīng)該是:int i;int &j=i;C/c+語語言言程程序序設(shè)設(shè)計計 (3) 為引用提供的初始值,可以是一個變量或另一個引用。例如: int i=5; /定義整型變量i int

25、&j1=i; /聲明j1是整型變量i的引用(別名) int &j2=j1; /聲明j2是整型引用j1的引用(別名)這樣定義后,變量i有兩個別名:j1和j2。 (4) 指針是通過地址間接訪問某個變量,需要書寫間接運算符“*”; 引用是通過別名直接訪問某個變量。 每次使用引用時,可以不用書寫間接運算符“*”,因而使用引用可以簡化程序。C/c+語語言言程程序序設(shè)設(shè)計計 例例 比較引用和指針的使用方法。比較引用和指針的使用方法。#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; 運行結(jié)果如下:運行結(jié)果如下: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)系上傳者。文件的所有權(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

提交評論