




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1C C 語(yǔ)言中的指針與語(yǔ)言中的指針與結(jié)構(gòu)體結(jié)構(gòu)體2指針指針的概念的概念地址地址 內(nèi)容內(nèi)容 變量名變量名int x = 20, y = 1, z = 155;int *p;p=&x;1000 20 x1002 1 y1004 155 z2000 1000 p2002 指針變量指針變量指針變量指針變量:存放地址的變量:存放地址的變量某個(gè)某個(gè)變量變量的地址的地址指向指向(內(nèi)存單元內(nèi)存單元)3指針變量所指向的變量的類型指針變量所指向的變量的類型int *p; p 是整型指針,指向整型變量是整型指針,指向整型變量float *fp; fp 是浮點(diǎn)型指針,指向浮點(diǎn)型變量是浮點(diǎn)型指針,指向浮點(diǎn)型變
2、量char *cp; cp 是字符型指針,指向字符型變量是字符型指針,指向字符型變量類型名類型名 * 指針變量名指針變量名指針聲明符指針聲明符指針變量的定義指針變量的定義4取地址運(yùn)算取地址運(yùn)算(&)和間接訪問運(yùn)算和間接訪問運(yùn)算(*)* :間接訪問運(yùn)算符間接訪問運(yùn)算符,訪問指針?biāo)赶虻淖兞俊?,訪問指針?biāo)赶虻淖兞俊?*p:指針變量:指針變量 p 所所指向的指向的變量變量。a3&ap*p如果指針的值是某個(gè)變量的地址,通過(guò)指針就如果指針的值是某個(gè)變量的地址,通過(guò)指針就能能間接訪問間接訪問那個(gè)變量。那個(gè)變量。& : 取地址運(yùn)算符取地址運(yùn)算符,給出變量的地址。,給出變量的地址。i
3、nt *p, a = 3;p = &a; 把把 a 的地址賦給的地址賦給 p,即,即 p 指向指向 a/指針變量的類型和它所指向變量的類型相同指針變量的類型和它所指向變量的類型相同5a3&ap*p(1) 當(dāng)當(dāng) p = &a 后,后,*p 與與 a 相同相同(2) int *p; 定義定義指針變量指針變量 p *p =10; 指針指針p所指所指向向的變量的變量,即,即a,改變變量值,改變變量值(3) &*p 與與 &a 相同,相同,是是地址地址 *&a 與與 a 相同,相同,是是變量變量(4) (*p)+ 等價(jià)于等價(jià)于 a+ 將將 p 所指所指向向
4、的變量值加的變量值加1 *p+ 等價(jià)于等價(jià)于 *(p+) /先取先取 *p,然后,然后 p 自加自加,此時(shí)此時(shí)p不再指向不再指向a說(shuō)明說(shuō)明 int a = 3, *p;p = &a;6賦值運(yùn)算賦值運(yùn)算a3&ap1&ap2*p1 *p2int a = 3, *p1, *p2;p1 = &a; /把把 a 的地址賦給的地址賦給 p1,即,即 p1 指向指向 ap2 = p1; /p2 也指向也指向 a/相同類型的指針才能相互賦值相同類型的指針才能相互賦值7注意:注意: 指針指針變量必須初始化。變量必須初始化。void main () int a=1, b=2 , *
5、p1 , *p2 , *pt; p1 = &a ; p2 = &b; printf (a=%d, b=%d, *p1=%d, *p2=%dn, a, b, *p1, *p2); pt = p1; p1 = p2; p2 = pt; printf (“a=%d, b=%d, *p1=%d, *p2=%dn”, a, b, *p1, *p2); return 0;p1b2&bp2*p2a1&a*p1ptb2&ap2*p1a1&bp1*p2pt&aa = 1; b = 2; *p1 = 1, *p2 = 2a = 1; b = 2; *p1 =
6、 2, *p2 = 18指針指針作為函數(shù)參數(shù)作為函數(shù)參數(shù)void swap (int *px, int *py) int t; t = *px; *px = *py; *py = t;要通過(guò)函數(shù)調(diào)用來(lái)改變主調(diào)函數(shù)中某個(gè)變量的值:要通過(guò)函數(shù)調(diào)用來(lái)改變主調(diào)函數(shù)中某個(gè)變量的值:(1) 在主調(diào)函數(shù)中,在主調(diào)函數(shù)中,將該變量的地址或者指向該變量的將該變量的地址或者指向該變量的指針作為實(shí)參指針作為實(shí)參(2) 在被調(diào)函數(shù)中,在被調(diào)函數(shù)中,用指針類型形參接受該變量的地址用指針類型形參接受該變量的地址 (3) 在被調(diào)函數(shù)中,改變形參所指向變量的值在被調(diào)函數(shù)中,改變形參所指向變量的值abpxpy1221/ swa
7、p (&a, &b);9數(shù)組和地址間的關(guān)系數(shù)組和地址間的關(guān)系int a100, *p;數(shù)組名代表一個(gè)地?cái)?shù)組名代表一個(gè)地址,它的值是數(shù)址,它的值是數(shù)組首元素的地址組首元素的地址(基地址)(基地址)a+i 是距數(shù)組是距數(shù)組a的的基地址的第基地址的第i個(gè)偏個(gè)偏移移3000 a0地址地址 內(nèi)容內(nèi)容 數(shù)組元素?cái)?shù)組元素3002 a13198 a99 ai aa+1a+99a+i&ai*(a+i) sum = 0;for(i = 0; i 100; i+) sum = sum + ai ;*(a+i)下標(biāo)運(yùn)算符下標(biāo)運(yùn)算符 的含義的含義10任何由數(shù)組下標(biāo)來(lái)實(shí)現(xiàn)的操作都能用指針來(lái)完成任何
8、由數(shù)組下標(biāo)來(lái)實(shí)現(xiàn)的操作都能用指針來(lái)完成int a100, *p;p = a;或或p = &a0; pp+1p+99p+i3000 a0地址地址 內(nèi)容內(nèi)容 數(shù)組元素?cái)?shù)組元素3002 a13198 a99 ai aa+1a+99a+i&ai aia+i *(a+i)p+i *(p+i)&pi pip = a;sum = 0;for(i = 0; i 100; i+) sum = sum + pi;等價(jià)等價(jià)等價(jià)等價(jià)*(p+i)sum = 0;for(p = a; p ”訪問指針指向的結(jié)構(gòu)成員。訪問指針指向的結(jié)構(gòu)成員。p-age = 26;當(dāng)當(dāng)p = &friend1時(shí)
9、,以下三條語(yǔ)句相同:時(shí),以下三條語(yǔ)句相同: friend1.age = 26; (*p).age = 26; p-age = 26;30結(jié)構(gòu)體指針作為函數(shù)參數(shù)結(jié)構(gòu)體指針作為函數(shù)參數(shù)當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時(shí),執(zhí)行效率高,當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時(shí),執(zhí)行效率高,可以完成比基本類型指針更為復(fù)雜的操作??梢酝瓿杀然绢愋椭羔樃鼮閺?fù)雜的操作。例:輸入例:輸入10個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸出學(xué)生的成績(jī)等級(jí)和不及格人數(shù)。出學(xué)生的成績(jī)等級(jí)和不及格人數(shù)。 每個(gè)學(xué)生的記錄包括學(xué)號(hào)、姓名、成績(jī)和等級(jí)每個(gè)學(xué)生的記錄包括學(xué)號(hào)、姓名、成績(jī)和等級(jí) 要求定義和調(diào)用函數(shù)要求定義和調(diào)用函數(shù)set_
10、grade根據(jù)學(xué)生成績(jī)?cè)O(shè)置等級(jí),根據(jù)學(xué)生成績(jī)?cè)O(shè)置等級(jí),并統(tǒng)計(jì)不及格人數(shù)并統(tǒng)計(jì)不及格人數(shù) 等級(jí)設(shè)置:等級(jí)設(shè)置:A :85100;B:7084;C:6069;D:05931源程序源程序#define N 10struct student int num; char name20; int score; char grade;int main(void) int count; struct student stuN, *ptr; ptr = stu; /* 輸入輸入 略略 */ count = set_grade( ptr ); int set_grade(struct student * p) i
11、nt i, n = 0; for(i = 0; i score = 85) p-grade = A; else if(p-score = 70) p-grade = B; else if(p-score = 60) p-grade = C; else p-grade = D; n+; return n;調(diào)用調(diào)用set_grade返回主函數(shù)后,主函數(shù)中結(jié)構(gòu)體數(shù)組返回主函數(shù)后,主函數(shù)中結(jié)構(gòu)體數(shù)組stu的的元素的元素的grade成員已經(jīng)被賦值成員已經(jīng)被賦值. 與結(jié)構(gòu)體變量作為函數(shù)參數(shù)相比,用結(jié)構(gòu)體指針作為函數(shù)參與結(jié)構(gòu)體變量作為函數(shù)參數(shù)相比,用結(jié)構(gòu)體指針作為函數(shù)參數(shù)的效率更高,因而是更好的選擇。數(shù)的效
12、率更高,因而是更好的選擇。32多文件結(jié)構(gòu)多文件結(jié)構(gòu)工作區(qū)工作區(qū)工程工程1工程工程2工程工程n頭文頭文件件源文源文件件 例:例:VC中的多文件結(jié)構(gòu)中的多文件結(jié)構(gòu)33示例示例#include #include #include #include /常量定義常量定義#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2#define True 1#define False 0/函數(shù)返回值類型定義函數(shù)返回值類型定義typedef int Status;/表節(jié)點(diǎn)數(shù)據(jù)類
13、型定義表節(jié)點(diǎn)數(shù)據(jù)類型定義typedef int ElemType;/順序表類型定義順序表類型定義typedef structElemType *elem;int length;int listsize; SqList;/順序表各操作聲明順序表各操作聲明Status InitList_Sq(SqList &L);Status DetroyList_Sq(SqList &L);Status ClearList_Sq(SqList &L);int ListEmpty_Sq(SqList L);int ListLength_Sq(SqList L);Status GetElem
14、_Sq(SqList L,int i,ElemType &e);Status ListInsert_Sq(SqList &L,int i,ElemType e);Status ListDelete_Sq(SqList &L,int i,ElemType &e);void PrintList_Sq(SqList L);頭文件:頭文件:SqList.h34#include SqList.h/各操作的實(shí)現(xiàn)各操作的實(shí)現(xiàn)Status InitList_Sq(SqList &L)L.elem=(ElemType *)malloc(LIST_INIT_SIZE*siz
15、eof(ElemType);if (!L.elem) exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;Status DetroyList_Sq(SqList &L)if (L.elem) free(L.elem);return OK;Status ClearList_Sq(SqList &L)if (L.elem)L.length=0;L.listsize=0;return OK;源文件:源文件:SqList.cpp35int ListEmpty_Sq(SqList L)return (L.length
16、=0);int ListLength_Sq(SqList L)return L.length;Status GetElem_Sq(SqList L,int i,ElemType &e)if (i=L.length)return ERROR;e=L.elemi-1;return OK;36Status ListInsert_Sq(SqList &L,int i,ElemType e)ElemType *newbase,*p,*q; if (iL.length+1)return ERROR;if (L.length=L.listsize)newbase = (ElemType *)
17、realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType); if (!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1);for (p=&L.elemL.length-1;p=q;p-)*(p+1)=*p;*q=e;L.length+;return OK;37Status ListDelete_Sq(SqList &L,int i,ElemType &e)ElemType *p,*q; if
18、 (iL.length)return ERROR;p=&(L.elemi-1);e=*p;q=L.elem+L.length-1;for (+p;pq;+p)*(p-1)=*p;L.length-;return OK;void PrintList_Sq(SqList L)int i;if (L.length=0)cout該表為空該表為空endl;else for (i=0;iL.length;i+) coutL.elemi ;38#include SqList.hvoid main()SqList L;int i,num;cout創(chuàng)建順序表創(chuàng)建順序表endl;if (!InitList_Sq(L)cout表創(chuàng)建失敗表創(chuàng)建失敗; /創(chuàng)建空順序表創(chuàng)建空順序表Lelse/產(chǎn)生各節(jié)點(diǎn)產(chǎn)生各節(jié)點(diǎn)srand(time(NULL);for (i=0;i10;i+) /產(chǎn)生產(chǎn)生10個(gè)整數(shù),插入順序表表尾個(gè)整數(shù),插入順序表表尾 num = rand() % 100;ListInsert_Sq(L,i+1,(ElemType
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考?xì)v史總復(fù)習(xí)世界歷史九年級(jí)下冊(cè)(世界現(xiàn)代史部分)全冊(cè)知識(shí)清單(超強(qiáng))
- 酒店餐飲營(yíng)銷培訓(xùn)體系構(gòu)建
- 《醫(yī)學(xué)影像信息交流實(shí)施工具》課件
- 仿銅浮雕畫培訓(xùn)
- 輪胎購(gòu)銷合同協(xié)議版
- 殘聯(lián)免責(zé)協(xié)議書
- 《管理基礎(chǔ)理論》教學(xué)課件
- 灌漿施工協(xié)議書
- 轉(zhuǎn)讓家具工具合同協(xié)議
- 《中醫(yī)養(yǎng)生基礎(chǔ)》課件
- JT-T-1198-2018公路交通噪聲防護(hù)措施分類及技術(shù)要求
- 上海市寶山區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末語(yǔ)文試卷
- 暢銷書營(yíng)銷分析報(bào)告
- 廣東省廣州市越秀區(qū)2024年八年級(jí)下學(xué)期期末英語(yǔ)試卷附答案
- 2024學(xué)年(上)廈門市九年級(jí)質(zhì)量檢測(cè)化學(xué)試題及答案
- 奮進(jìn)新征程建功新時(shí)代征文15篇
- 文化差異與跨文化交際智慧樹知到期末考試答案章節(jié)答案2024年鄭州大學(xué)
- SYT 6169-2021 油藏分類-PDF解密
- 2024-2029年中國(guó)玻璃纖維增強(qiáng)混凝土行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告
- 24春國(guó)家開放大學(xué)《兒童心理學(xué)》期末大作業(yè)參考答案
- 2024年中國(guó)人保招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論