C語(yǔ)言多維數(shù)組的指針變量_第1頁(yè)
C語(yǔ)言多維數(shù)組的指針變量_第2頁(yè)
C語(yǔ)言多維數(shù)組的指針變量_第3頁(yè)
C語(yǔ)言多維數(shù)組的指針變量_第4頁(yè)
C語(yǔ)言多維數(shù)組的指針變量_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、多維數(shù)組地址的表示方法設(shè)有整型二維數(shù)組 a34如下:0 1 2 34 5 6 78 9 10 11設(shè)數(shù)組 a 的首地址為 1000,各下標(biāo)變量的首地址及其值如圖所示。在前面曾經(jīng)介紹過(guò), C語(yǔ)言允許把一個(gè)二維數(shù)組分解為多個(gè)一維數(shù)組來(lái)處理。因此數(shù)組 a 可分解為三個(gè)一維數(shù)組, 即 a0, a1, a2。 每一個(gè)一維數(shù)組又含有四個(gè)元素。 例如 a0數(shù)組,含有 a00, a01, a02, a03四個(gè)元素。 數(shù)組及數(shù)組元素的地址表示 如下:a 是二維數(shù)組名,也是二維數(shù)組 0行的首地址,等于 1000。 a0是第一個(gè)一維數(shù)組的 數(shù)組名和首地址, 因此也為 1000。 *(a+0或 *a是與 a0等效

2、的, 它表示一維數(shù)組 a00 號(hào) 元素的首地址。 也為 1000。 &a00是二維數(shù)組 a 的 0行 0列元素首地址,同樣是 1000。 因此, a , a0, *(a+0, *a, &a00是相等的。同理, a+1是二維數(shù)組 1行的首地址, 等于 1008。 a1是第二個(gè)一維數(shù)組的數(shù)組名和首地址, 因此也為 1008。 &a10是二維數(shù) 組 a 的 1行 0列元素地址, 也是 1008。 因此 a+1,a1,*(a+1,&a10是等同的。 由此可 得出:a+i, ai, *(a+i, &ai0是等同的。 此外, &ai和 ai也是等同的。因?yàn)樵?/p>

3、 二維數(shù)組中不能把 &ai理解為元素 ai的地址,不存在元素 ai。C 語(yǔ)言規(guī)定, 它是一種地址計(jì)算方法, 表示數(shù)組 a 第 i 行首地址。 由此, 我們得出:ai, &ai, *(a+i和 a+i也都是等同的。 另外, a0也可以看成是 a0+0是一維數(shù)組 a0的 0號(hào)元素的首地址, 而 a0+1則是 a0的 1號(hào)元素首地址,由此可得出 ai+j則是一維數(shù) 組 ai的 j 號(hào)元素首地址,它等于 &aij。由 ai=*(a+i得 ai+j=*(a+i+j,由于 *(a+i+j是二維數(shù)組 a 的 i 行 j 列元素的首地址。該元素的值等于 *(*(a+i+j。Explai

4、n#define PF "%d,%d,%d,%d,%d,n"main(static int a34=0,1,2,3,4,5,6,7,8,9,10,11;printf(PF,a,*a,a0,&a0,&a00;printf(PF,a+1,*(a+1,a1,&a1,&a10;printf(PF,a+2,*(a+2,a2,&a2,&a20;printf("%d,%dn",a1+1,*(a+1+1;printf("%d,%dn",*(a1+1,*(*(a+1+1;二、多維數(shù)組的指針變量把二維數(shù)組

5、a 分解為一維數(shù)組 a0,a1,a2之后, 設(shè) p 為指向二維數(shù)組的指針變量。 可定義為: int (*p4 它表示 p 是一個(gè)指針變量,它指向二維數(shù)組 a 或指向第一個(gè)一維數(shù)組 a0,其值等于 a,a0,或 &a00等。而 p+i則指向一維數(shù)組 ai。從前面的分析 可得出 *(p+i+j是二維數(shù)組 i 行 j 列的元素的地址, 而 *(*(p+i+j則是 i 行 j 列元素的值。二維數(shù)組指針變量說(shuō)明的一般形式為:類型說(shuō)明符 (*指針變量名 長(zhǎng)度 其中“類型 說(shuō)明符”為所指數(shù)組的數(shù)據(jù)類型。 “*”表示其后的變量是指針類型。 “長(zhǎng)度”表示二維數(shù) 組分解為多個(gè)一維數(shù)組時(shí), 一維數(shù)組的長(zhǎng)度,

6、也就是二維數(shù)組的列數(shù)。應(yīng)注意“(*指針變 量名”兩邊的括號(hào)不可少,如缺少括號(hào)則表示是指針數(shù)組 (本章后面介紹 ,意義就完全不 同了。Explainmain(static int a34=0,1,2,3,4,5,6,7,8,9,10,11;int(*p4;int i,j;p=a;for(i=0;i<3;i+for(j=0;j<4;j+ printf("%2d ",*(*(p+i+j;'Expain 字符串指針變量的說(shuō)明和使用字符串指針變量的定義說(shuō)明與指向字符變量的 指針變量說(shuō)明是相同的。只能按對(duì)指針變量的賦值不同來(lái)區(qū)別。 對(duì)指向字符變量的指針變 量應(yīng)賦予該

7、字符變量的地址。 如: char c,*p=&c;表示 p 是一個(gè)指向字符變量 c 的指針變量。 而: char *s="C Language" 則表示 s 是一個(gè)指向字符串的指針變量。把字符串的首地址賦 予 s 。請(qǐng)看下面一例。main(char *ps;ps="C Language"printf("%s",ps;運(yùn)行結(jié)果為:C Language上例中,首先定義 ps 是一個(gè)字符指針變量, 然后把字符串的首地址賦予 ps(應(yīng)寫出整 個(gè)字符串, 以便編譯系統(tǒng)把該串裝入連續(xù)的一塊內(nèi)存單元 , 并把首地址送入 ps 。 程序中的:

8、 char *ps;ps="C Language" 等效于: char *ps="C Language" 輸出字符串中 n 個(gè)字符后的 所有字符。main(char *ps="this is a book"int n=10;ps=ps+n;printf("%sn",ps;運(yùn)行結(jié)果為:book 在程序中對(duì) ps 初始化時(shí),即把字符串首地址賦予 ps ,當(dāng) ps= ps+10之后, ps 指 向字符“b”,因此輸出為 "book" 。main(char st20,*ps;int i;printf(&

9、quot;input a string:n"ps=st;scanf("%s",ps;for(i=0;psi!='0'i+if(psi='k'printf("there is a 'k' in the stringn"break;if(psi='0' printf("There is no 'k' in the stringn"本例是在輸入的字符串中查找有無(wú)k字符。 下面這個(gè)例子是將指針變量指向一個(gè)格 式字符串, 用在 printf 函數(shù)中, 用于

10、輸出二維數(shù)組的各種地址表示的值。 但在 printf 語(yǔ)句 中用指針變量 PF 代替了格式串。 這也是程序中常用的方法。main(static int a34=0,1,2,3,4,5,6,7,8,9,10,11;char *PF;PF="%d,%d,%d,%d,%dn"printf(PF,a,*a,a0,&a0,&a00;printf(PF,a+1,*(a+1,a1,&a1,&a10;printf(PF,a+2,*(a+2,a2,&a2,&a20;printf("%d,%dn",a1+1,*(a+1+1;p

11、rintf("%d,%dn",*(a1+1,*(*(a+1+1;在下例是講解, 把字符串指針作為函數(shù)參數(shù)的使用。 要求把一個(gè)字符串的內(nèi)容復(fù)制到另 一個(gè)字符串中,并且不能使用 strcpy 函數(shù)。函數(shù) cprstr 的形參為兩個(gè)字符指針變量。 pss 指向源字符串, pds 指向目標(biāo)字符串。表達(dá)式:(*pds=*pss!=0'cpystr(char *pss,char *pdswhile(*pds=*pss!='0'pds+;pss+; main(char *pa="CHINA",b10,*pb;pb=b;cpystr(pa,pb;

12、printf("string a=%snstring b=%sn",pa,pb;在上例中, 程序完成了兩項(xiàng)工作:一是把 pss 指向的源字符復(fù)制到 pds 所指向的目標(biāo)字 符中, 二是判斷所復(fù)制的字符是否為 0', 若是則表明源字符串結(jié)束, 不再循環(huán)。 否則, pds 和 pss 都加 1,指向下一字符。在主函數(shù)中,以指針變量 pa,pb 為實(shí)參,分別取得確定值后 調(diào)用 cprstr 函數(shù)。由于采用的指針變量 pa 和 pss,pb 和 pds 均指向同一字符串,因此在主 函數(shù)和 cprstr 函數(shù)中均可使用這些字符串。也可以把 cprstr 函數(shù)簡(jiǎn)化為以下形式:c

13、prstr(char *pss,char*pdswhile (*pds+=*pss+!=0'即把指針的移動(dòng)和賦值合并在一個(gè)語(yǔ)句中。 進(jìn)一步分析還可發(fā)現(xiàn) 0'的 ASC碼為 0, 對(duì)于 while 語(yǔ)句只看表達(dá)式的值為非 0就循環(huán), 為 0則結(jié)束循環(huán), 因此也可省去“!=0'” 這一判斷部分,而寫為以下形式:cprstr (char *pss,char *pdswhile (*pdss+=*pss+;表達(dá)式的意義可解釋為, 源字符向目標(biāo)字符賦值, 移動(dòng)指針, 若所賦值為非 0則循環(huán), 否則結(jié)束循環(huán)。這樣使程序更加簡(jiǎn)潔。簡(jiǎn)化后的程序如下所示。cpystr(char *pss

14、,char *pdswhile(*pds+=*pss+;main(char *pa="CHINA",b10,*pb;pb=b;cpystr(pa,pb;printf("string a=%snstring b=%sn",pa,pb;使用字符串指針變量與字符數(shù)組的區(qū)別用字符數(shù)組和字符指針變量都可實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算。 但是兩者是有區(qū)別的。在 使用時(shí)應(yīng)注意以下幾個(gè)問(wèn)題:1. 字符串指針變量本身是一個(gè)變量,用于存放字符串的首地址。而字符串本身是存放 在以該首地址為首的一塊連續(xù)的內(nèi)存空間中并以 0作為串的結(jié)束。 字符數(shù)組是由于若干 個(gè)數(shù)組元素組成的,它可用來(lái)存放整個(gè)字符串。2. 對(duì)字符數(shù)組作初始化賦值,必須采用外部類型或靜態(tài)類型,如: static char st=“C Language”;而對(duì)字符串指針變量則無(wú)此限制,如: char *ps="C Language"3. 對(duì) 字 符串 指針?lè)?式 char *ps="C Language" 可以 寫為 :char *ps;ps="C Language" 而對(duì)數(shù)組方式:static char st="C Language"不能寫為:char st20;st="C L

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論