• /  42
  • 下載費用: 9.90積分  

c精品課件教學作者昆明理工大學A第七章指針.ppt

'c精品課件教學作者昆明理工大學A第七章指針.ppt'
第七章指針1 研究式學習—C程序設計(第七章)主要內容內存地址及數據的存取方式指針的定義及運算指向數組的指針指針操作字符串用指針實現數據的動態管理2 研究式學習—C程序設計(第七章)內存地址計算機的內存儲器就象一個巨大的一維數組,每個數組元素就是一個存儲單元類似每個數組元素的下標,每個內存單元都有一個編號(無符號整數),稱為該單元的地址注意區分內存單元的地址與內存單元的值 0000:00000000:0001……4000:10004000:10014000:10024000:1003……A000:C300A000:C301……FFFF:FFFF內存空間線性排列586A3 研究式學習—C程序設計(第七章)存取數據的方法在運行一個程序時,程序及其數據(程序、函數、變量、常量、數組等)都要放在內存儲器中編譯程序根據對象的數據類型,在內存中為其分配一個或多個連續的存儲單元。在編寫程序時,通常是通過名字來使用一個變量或調用某個函數,而變量和函數的名字與其實際的存儲地址之間的變換由編譯程序自動完成,編譯程序按變量名查找其地址,然后對該地址中的內容進行讀寫操作 4 研究式學習—C程序設計(第七章)內存分配方式單元地址變量名(符號名)變量類型占用單元長度規定運算操作值的存放形式空閑空間操作系統占用區0000:0000……3CFF:0000……8F10:0000……A100:0000……C100:2BFFFFFF:FFFF靜態區 (全局變量、 靜態局部變量)程序區(函數及其常量代碼)應用程序空間動態區 (局部變量、形參變量) 臨時占用空間5 研究式學習—C程序設計(第七章)變量的訪問形式直接訪問:變量名代表著該變量已分到的地址,對一般變量的存取就可以通過變量的地址(變量名)來進行。按變量地址存取變量值的方式稱為直接訪問。間接訪問:這種方式好比我們要找到寶藏,必須先找到埋寶藏的地址,才能根據地址找到寶藏。 20002000200230102006變量 i變量 j變量ip36.550若變量ip保存著變量i的地址,通過ip存取i的值就是間接訪問。要使用間接訪問運算符 *6 研究式學習—C程序設計(第七章)  指針作為函數參數實現多值返回具有其它類型數據所不具備的功能。一、問題的提出 從鍵盤輸入兩個整數放到變量a、b中,編寫子函數交換兩個變量。二、基本算法:該題要求通過子函數的調用實現向主調函數返回兩個結果值的運算。我們先嘗試用普通變量的方法來編寫:引入指針的意義7 研究式學習—C程序設計(第七章)swap(p,q)int p,q;{int temp;temp=p;p=q;q=temp;return(……) /*只能返回一個值*/}指針的意義main(){int a,b;scanf(“%d,%d”,&a,&b);swap(a,b);……}  程序設計到這里就無法進行下去了,因為變量a、b作實參,只是將其值單向傳遞給形參p、q,在swap函數中只是交換了p、q的值,不會反方向影響a、b的值。要想得到結果值,要通過return語句進行返回,而C語言中被調函數只能向主函數返回一個值,故采用普通類型的變量作參數就無法將改變后的兩個結果值都返回主函數。8 研究式學習—C程序設計(第七章)指針的意義解決該問題的辦法有兩個:一種簡單的方法就是將其中的變量定義為全局變量,使其攜帶結果值返回。但全局變量一經定義,就從定義處開始在整個程序執行過程中都都占用存儲空間,直到程序結束。既浪費空間又不利于程序的模塊化結構設計,不提倡。 另一種方法就是使用指針類型的數據作為函數的參數。C語言中實參變量和形參變量之間的數據傳遞是單向的“值傳遞”方式,指針變量作函數參數也要遵循這一規則。被調函數不能改變實參指針變量的值,但可以改變實參指針變量所指變量的值。運用指針變量作參數,就能使被調函數和主函數在同一變量上操作,從而得到多個返回值。9 研究式學習—C程序設計(第七章)指針的意義swap(int *p1,int *p2){int p; p=*p1; *p1=*p2; *p2=p;}main(){int a,b;int *max, *min;scanf(“%d,%d”,&a,&b);max=&a;min=&b;swap(max,min);printf(“\n%d,%d”,a,b);} 運行情況為:1,88,1實例:例12.110 研究式學習—C程序設計(第七章)指針作函數的參數該程序中,實參max、min,形參p1、p2,都是指針變量,進行調用時,遵循“單向值傳遞”的原則,將max和min的值(變量a和b的地址)傳遞給p1和p2,使max和p1共同指向變量a ,min和p2共同指向變量b。max&aa1min&bb8max&aa1min&bb8p1&ap2&b主函數中參數傳遞(虛實結合)11 研究式學習—C程序設計(第七章)指針作函數的參數通過p1和p2的操作改變變量a和b的值,達到改變多個變量值的目的。 max&aa8min&bb1max&aa1min&bb8p1&ap2&b調用實現交換調用后回主函數(釋放虛參)p81①②③112 研究式學習—C程序設計(第七章)指針的定義及運算 定義指針變量的語法格式為:類型說明符 *指針變量名1,*指針變量名2,…;  *表示變量為指針類型,以區別普通變量;“類型說明符”表示該指針變量所能指向的變量類型,可以是任何一種已有的數據類型。指針變量可以在定義的時候就進行初始化?! ∽⒁猓喝魏巫兞慷加腥齻€要素:變量名、變量的值(包括上述的變量值和指針值)和變量類型,指針變量的類型是它所指向的變量的類型,一個指針變量只能指向同一個類型的變量 13 研究式學習—C程序設計(第七章)指針的定義及運算 1)  取地址運算符&  “&”是單目運算符,用在變量前,作用是取得變量的地址(即變量的指針),常用于給指針變量賦值。例如有以下定義:   float f1=2.5,f2[]={1.0,2.0,3.0};   float *fp1=&f1,*fp2=f2;則建立了指針變量fp1指向變量f1,指針變量fp2指向f2數組的首元素(相當于fp2=&f2[0])的指向關系?!??f2是一個數組名,為什么能把一個數組名賦給一個指針變量呢?14 研究式學習—C程序設計(第七。省略部分。* s每向后移一個字符,計數一次,直至遇到空字符*/ len++; return(len);}例7.5測試字符串的長度函數30 研究式學習—C程序設計(第七章)指針操作字符串 void strcpy(char *dest,char *src) /* 拷貝源串src到目的串dest */while((*dest++=*src++)!=’\0’);}說明:dest和src是兩個指向字符串的指針。函數調用時,分別把目的字符串和源字符串的起始地址傳給dest和src。然后把src指向的字符對應賦值到dest所指向的空間,接著各自移動一個字符空間,進行下一個字符的賦值,直到遇到空字符‘\0’。 例7.6字符串拷貝31 研究式學習—C程序設計(第七章)指針操作字符串 int strcmp(char *s,char *t){while(*s==*t) /*在兩個字符串中尋找出現對應字符不同的位置*/ {if(*s==’\0’) return 0; /*找到’\0’ 兩字符串相等*/  s++;t++;}return(*s-*t); } /*返回兩個對應位置上不同的字符差值*/}例7.7對兩個字符串中的字符一一進行比較,若兩個字符串中的字符完全相同,返回0;若兩個字符串中有不同的字符,返回最先出現不同的兩個字符的差值。32 研究式學習—C程序設計(第七章)指針操作字符串 該函數的調用有三種返回值:正值、0、負值,其中正負具體值由參與比較的字符串本身所決定。如:strcmp(“abc”,”aBc”)    返回值為:32 (‘b’-‘B’=32)strcmp(“abc”,”abc”)    返回值為:0 (直到字符串結束都相同)strcmp(“abc”,”aec”)  返回值為:-3 (‘b’-‘e’= -3)例7.7字符串比較實例33 研究式學習—C程序設計(第七章)指針操作字符串 char strrev(char *s){char *head=s,*tail; char temp;tail=s+(strlen(s)-1); /*指向倒數第一個元素*/ while(head成員名; 其中->稱為指向運算符 如: struct workertype *currnode;則可以:printf("\n enter worker no:"); /*輸入職工號*/ gets(numstr); currnode->workno=atol(numstr); 39 研究式學習—C程序設計(第七章)動態內存分配函數 malloc(size)功能:在內存的動態存儲區中分配size個字節的連續空間。返回值為分配到的內存區域的起始地址,并為可賦給任何類型指針變量的void *類型(空指針類型)。若沒有可用的內存,malloc函數將返回NULL指針。malloc函數通常和求字節數運算符sizeof一起使用。 ptr=malloc(sizeof(struct node));40 研究式學習—C程序設計(第七章)動態內存分配函數 free(ptr)功能:釋放由指針ptr指向的內存區,即把所占用的內存交還給系統,以便以后能夠重新分配。其中ptr是通過動態分配得到的指針。 注意:使用malloc函數和free函數時需在程序首部包含stdlib.h或alloc.h頭文件。41 研究式學習—C程序設計(第七章)鏈表(linked list)定義:是用指針鏈在一起的結點的線性集合,每個結點就是前面介紹過的自引用結構。 說明:鏈表屬于線性數據結構,它由被稱為結點的元素組成。鏈表的物理存儲形式只能采用鏈式存儲結構,并以隨機形式訪問它們的存儲單元。鏈表結點在存儲上可以不相鄰,但在邏輯上卻是相鄰的。鏈表的主要操作包括建立鏈表,插入和刪除結點等。詳細過程請參閱教材42 研究式學習—C程序設計(第七章)
關 鍵 詞:
教學 作者 昆明 理工大學 第七 精品 指針
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:c精品課件教學作者昆明理工大學A第七章指針.ppt
鏈接地址: http://www.476824.live/p-51617262.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 贵州快三预测 浙江6十1开奖18055期 安徽快3开奖结果查询昨天 极速赛车6码怎么看规律 多江西彩开奖结果 产业基金配资要求 体彩云南11选5 江苏快三怎么才能稳赚 体育彩票快中彩 北京11选一定牛