《指針4指針數(shù)組多級指針動態(tài)指針》由會員分享,可在線閱讀,更多相關《指針4指針數(shù)組多級指針動態(tài)指針(23頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1 數(shù)組指針以此類推v 一 維 數(shù) 組 名 是 “ 列 指 針 類 型 ” -“元 素 指 針 類 型 ”指 針 變 量 的 定 義:int *p;v 二 維 數(shù) 組 名 是 “ 行 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)4 ;v 三 維 數(shù) 組 名 是 “ 頁 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)34 ; v 四 維 數(shù) 組 名 是 “ 塊 指 針 類 型 ”指 針 變 量 的 定 義:int (*p)345 ;圓括號是必須的 2 問題的提出v 變 量 是 用 于 存 放 單 個 數(shù) 據(jù) 的v 數(shù) 組 是 用 于 存 放 “ 同 類 型 ”
2、的 多 個 數(shù) 據(jù) 的方 便 循 環(huán) 控 制 結 構 的 編 程v 指 針 變 量 是 用 于 存 放 單 個 地 址 號 的v “ 同 類 型 ” 的 多 個 地 址 號 是 否 能 夠 集 中 存 儲在 一 起 構 成 “ 指 針 數(shù) 組 ” 呢 ? 3 v 元 素 均 為 指 針 類 型 數(shù) 據(jù) 的 數(shù) 組 , 稱 為 指 針 數(shù) 組 v 定 義 形 式 為 : 類 型 關 鍵 字 *數(shù) 組 名 數(shù) 組 長 度 ;v 例 如 char *pStr5; 四、指針數(shù)組注意沒有 圓括號 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ù) 一 個 函 數(shù) 可 以 返 回 一 個 int型 、 float型 、 char型的 數(shù) 據(jù) , 也 可 以 返 回 一 個 指 針 類 型 的 數(shù) 據(jù) , 即 地址 。 返 回 指 針 值 的 函 數(shù) ( 簡 稱 指 針 函 數(shù) ) 的 定 義 格 式 如下 : 函 數(shù) 類 型 *函 數(shù) 名 (參 數(shù) 表 ) 例 int *f(int x, int y) 11 例 求一維數(shù)組的最大值及其下標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 五、 多級指針和動態(tài)指針1.概念及定義v定義: 指向指針的指針v一級指針:指針變量中存放目標變量的地址p1 int *p2; int i=3; p2= p1= *p1=5;二級指針:指針變量中存放一級指針變量的地址例 int *p; int i=3; p= *p=5; (2) 賦值 p=pp=(3)引用方法
8、pp的值 *pp的值*pp的值多級指針定義形式 14 動 態(tài) 分 配 內 存 15 2.動 態(tài) 指 針v 為 什 么 要 動 態(tài) 分 配 內 存 ? 當 事 先 不 知 道 所 需 要 處 理 的 數(shù) 據(jù) 有 多 大 時 , 使用 靜 態(tài) 數(shù) 組 , 若 數(shù) 組 開 辟 得 太 大 , 則 浪 費 內 存 資源 ( 甚 至 可 能 不 成 功 ) ; 若 開 辟 得 太 小 , 又 不 能滿 足 計 算 需 要 。 采 用 動 態(tài) 分 配 內 存 的 方 法 , 使 用完 畢 , 再 釋 放 內 存 , 以 備 其 它 程 序 使 用 。 C語 言 中 提 供 了 幾 個 標 準 函 數(shù) ,
9、以 實 現(xiàn) 內 存 的分 配 和 釋 放 。 16 動態(tài)分配內存v#include v#include vvoid* malloc(unsigned int size);向系統(tǒng)申請大小為size的內存塊,把首地址返回。如果申請不成功,返回NULLvvoid* calloc(unsigned int num, unsigned int size);向系統(tǒng)申請num個size大小的內存塊,把首地址返回。如果申請不成功,返回NULL vvoid free(void* p);釋放由malloc()和calloc()申請的內存塊。p是指向此塊的指針vvoid*類型的指針可以指向任意類型的變量 17 動態(tài)
10、數(shù)組v一維動態(tài)數(shù)組 int *p = NULL;printf(Please enter array size:);scanf(%d, p = (int *) malloc(n * sizeof (int); pi /像使用一維數(shù)組一樣使用v二維動態(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ù)指針(選學)1.函數(shù)指針的概念 一個函數(shù)在編譯時,被分配了一個入口地址,這個地址就稱為該函數(shù)的指針??梢杂靡粋€指針變
11、量指向一個函數(shù),然后通過該指針變量調用此函數(shù) 19 2.指向函數(shù)的指針變量(1)定義格式 函數(shù)類型 (*指針變量)( ); 注意:“*指針變量”外的括號不能缺,否則成了返回指針值的函數(shù)。 例如,int (*fp)( ); /* fp為指向int函數(shù)的指針變量*/(2)賦值 函數(shù)名代表該函數(shù)的入口地址。因此,可用函數(shù)名給指向函數(shù)的指針變量賦值。 指向函數(shù)的指針變量 注意:函數(shù)名后不能帶括號和參數(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指針的使用原則永遠要清楚指針變量存放的是什么,指向了什么 v指針與數(shù)組之間的關系理解一維數(shù)組與指針是理解二維數(shù)組與指針的基礎掌握二維數(shù)組在內存中的存放方式,是理解二維數(shù)組的行指針和列指針的關鍵v指針數(shù)組v指針函數(shù) v指針的應用做函數(shù)參數(shù),傳地址調用動態(tài)分配內存,實現(xiàn)動態(tài)數(shù)組,對于動態(tài)分配的內存,不要忘記在不使用時釋放請自己總結這章所學內容