《指針4指針數(shù)組多級(jí)指針動(dòng)態(tài)指針》由會(huì)員分享,可在線閱讀,更多相關(guān)《指針4指針數(shù)組多級(jí)指針動(dòng)態(tài)指針(23頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、1 數(shù)組指針以此類推v 一 維 數(shù) 組 名 是 “ 列 指 針 類 型 ” -“元 素 指 針 類 型 ”指 針 變 量 的 定 義:int *p;v 二 維 數(shù) 組 名 是 “ 行 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)4 ;v 三 維 數(shù) 組 名 是 “ 頁 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)34 ; v 四 維 數(shù) 組 名 是 “ 塊 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)345 ;圓括號(hào)是必須的 2 問題的提出v 變 量 是 用 于 存 放 單 個(gè) 數(shù) 據(jù) 的v 數(shù) 組 是 用 于 存 放 “ 同 類 型 ”
2、的 多 個(gè) 數(shù) 據(jù) 的方 便 循 環(huán) 控 制 結(jié) 構(gòu) 的 編 程v 指 針 變 量 是 用 于 存 放 單 個(gè) 地 址 號(hào) 的v “ 同 類 型 ” 的 多 個(gè) 地 址 號(hào) 是 否 能 夠 集 中 存 儲(chǔ)在 一 起 構(gòu) 成 “ 指 針 數(shù) 組 ” 呢 ? 3 v 元 素 均 為 指 針 類 型 數(shù) 據(jù) 的 數(shù) 組 , 稱 為 指 針 數(shù) 組 v 定 義 形 式 為 : 類 型 關(guān) 鍵 字 *數(shù) 組 名 數(shù) 組 長 度 ;v 例 如 char *pStr5; 四、指針數(shù)組注意沒有 圓括號(hào) 4 例: 二維字符數(shù)組void main() int i; char str10 = Pascal,Basi
3、c,Fortran, Java,Visual C; for (i=0; i5; i+) printf(%sn, stri); strPascalBasicFortranJava二維數(shù)組Visual C 5 例:字符指針數(shù)組void main() int i; char *ptr = Pascal,Basic,Fortran, Java,Visual C; for (i=0; i5; i+) printf(%sn, ptri); PascalBasicFortranJavaptr指針數(shù)組字符串ptrVisual C 6 例:字符串按字典順序排序二維數(shù)組編程char strN10 = Pascal
4、,Basic,Fortran, Java,Visual C; for (i=0; iN-1; i+) for (j = i+1; jN; j+) if (strcmp(strj, stri) 0) strcpy(temp,stri); strcpy(stri,strj); strcpy(strj,temp); name0 P a s c a l 0 0 0 0 name1 B a s i c 0 0 0 0 0 name2 F o r t r a n 0 0 0 name3 J a v a 0 0 0 0 0 0 name4 V i s u a l C 0 0 name0 B a s i c
5、0 0 0 0 0 name1 F o r t r a n 0 0 0 name2 J a v a 0 0 0 0 0 0 name3 P a s c a l 0 0 0 0 name4 V i s u a l C 0 0 7 例:字符串按字典順序排序指針數(shù)組編程char *ptrN = Pascal,Basic,Fortran, Java,Visual C;for (i=0; iN-1; i+) for (j = i+1; jN; j+) if (strcmp(ptrj, ptri) 1)printf(The other arguments are following:n);for (i =
6、 1; iargc; i+) printf(%sn, argvi); getch();echo.exehelloworldptr指針數(shù)組字符串name 10 指針型函數(shù) 一 個(gè) 函 數(shù) 可 以 返 回 一 個(gè) int型 、 float型 、 char型的 數(shù) 據(jù) , 也 可 以 返 回 一 個(gè) 指 針 類 型 的 數(shù) 據(jù) , 即 地址 。 返 回 指 針 值 的 函 數(shù) ( 簡(jiǎn) 稱 指 針 函 數(shù) ) 的 定 義 格 式 如下 : 函 數(shù) 類 型 *函 數(shù) 名 (參 數(shù) 表 ) 例 int *f(int x, int y) 11 例 求一維數(shù)組的最大值及其下標(biāo)v int *findMax(in
7、t x)v v int i,j;v j=0;v for(i=1;ixj)v j=i;v return(v v void main() v v int a5=3,6,1,9,12,*max;v max=findMax(a);v printf(max%d=%d,max-a,*max);v 12 五、 多級(jí)指針和動(dòng)態(tài)指針1.概念及定義v定義: 指向指針的指針v一級(jí)指針:指針變量中存放目標(biāo)變量的地址p1 int *p2; int i=3; p2= p1= *p1=5;二級(jí)指針:指針變量中存放一級(jí)指針變量的地址例 int *p; int i=3; p= *p=5; (2) 賦值 p=pp=(3)引用方法
8、pp的值 *pp的值*pp的值多級(jí)指針定義形式 14 動(dòng) 態(tài) 分 配 內(nèi) 存 15 2.動(dòng) 態(tài) 指 針v 為 什 么 要 動(dòng) 態(tài) 分 配 內(nèi) 存 ? 當(dāng) 事 先 不 知 道 所 需 要 處 理 的 數(shù) 據(jù) 有 多 大 時(shí) , 使用 靜 態(tài) 數(shù) 組 , 若 數(shù) 組 開 辟 得 太 大 , 則 浪 費(fèi) 內(nèi) 存 資源 ( 甚 至 可 能 不 成 功 ) ; 若 開 辟 得 太 小 , 又 不 能滿 足 計(jì) 算 需 要 。 采 用 動(dòng) 態(tài) 分 配 內(nèi) 存 的 方 法 , 使 用完 畢 , 再 釋 放 內(nèi) 存 , 以 備 其 它 程 序 使 用 。 C語 言 中 提 供 了 幾 個(gè) 標(biāo) 準(zhǔn) 函 數(shù) ,
9、以 實(shí) 現(xiàn) 內(nèi) 存 的分 配 和 釋 放 。 16 動(dòng)態(tài)分配內(nèi)存v#include v#include vvoid* malloc(unsigned int size);向系統(tǒng)申請(qǐng)大小為size的內(nèi)存塊,把首地址返回。如果申請(qǐng)不成功,返回NULLvvoid* calloc(unsigned int num, unsigned int size);向系統(tǒng)申請(qǐng)num個(gè)size大小的內(nèi)存塊,把首地址返回。如果申請(qǐng)不成功,返回NULL vvoid free(void* p);釋放由malloc()和calloc()申請(qǐng)的內(nèi)存塊。p是指向此塊的指針vvoid*類型的指針可以指向任意類型的變量 17 動(dòng)態(tài)
10、數(shù)組v一維動(dòng)態(tài)數(shù)組 int *p = NULL;printf(Please enter array size:);scanf(%d, p = (int *) malloc(n * sizeof (int); pi /像使用一維數(shù)組一樣使用v二維動(dòng)態(tài)數(shù)組printf(Please enter array size m,n:);scanf(%d,%d, p = (int *) calloc(m * n, sizeof (int);pi*n+j); /像使用一維數(shù)組一樣使用 18 函數(shù)指針(選學(xué))1.函數(shù)指針的概念 一個(gè)函數(shù)在編譯時(shí),被分配了一個(gè)入口地址,這個(gè)地址就稱為該函數(shù)的指針??梢杂靡粋€(gè)指針變
11、量指向一個(gè)函數(shù),然后通過該指針變量調(diào)用此函數(shù) 19 2.指向函數(shù)的指針變量(1)定義格式 函數(shù)類型 (*指針變量)( ); 注意:“*指針變量”外的括號(hào)不能缺,否則成了返回指針值的函數(shù)。 例如,int (*fp)( ); /* fp為指向int函數(shù)的指針變量*/(2)賦值 函數(shù)名代表該函數(shù)的入口地址。因此,可用函數(shù)名給指向函數(shù)的指針變量賦值。 指向函數(shù)的指針變量 注意:函數(shù)名后不能帶括號(hào)和參數(shù);函數(shù)名前的“for ( i=0;iy;int xiaoyu(int x,int y) return xy;/*條件:大于給定值,并能被2整除的*/ int main() int a9=1,2,3,4,5,6,7,8,9;int x;int (*fun)(int,int);fun=xiaoyu;x=Locate(a,9,6,fun);printf(Locate:%dn,x);return 1; 23 v指針的概念指針是一種特殊的數(shù)據(jù)類型v指針的使用原則永遠(yuǎn)要清楚指針變量存放的是什么,指向了什么 v指針與數(shù)組之間的關(guān)系理解一維數(shù)組與指針是理解二維數(shù)組與指針的基礎(chǔ)掌握二維數(shù)組在內(nèi)存中的存放方式,是理解二維數(shù)組的行指針和列指針的關(guān)鍵v指針數(shù)組v指針函數(shù) v指針的應(yīng)用做函數(shù)參數(shù),傳地址調(diào)用動(dòng)態(tài)分配內(nèi)存,實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,對(duì)于動(dòng)態(tài)分配的內(nèi)存,不要忘記在不使用時(shí)釋放請(qǐng)自己總結(jié)這章所學(xué)內(nèi)容