(完整版)指針與數(shù)組2_第1頁
(完整版)指針與數(shù)組2_第2頁
(完整版)指針與數(shù)組2_第3頁
(完整版)指針與數(shù)組2_第4頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1. 二維數(shù)組定義二維數(shù)組的一般形式為類型標(biāo)識符數(shù)組名 常量表達(dá)式 常量表達(dá)式 例如double fMatrixMN;二維數(shù)組可以看作是一個(gè) M行 N列的表格,也可以看成是一個(gè)有 M個(gè)元素的一維數(shù)組,該數(shù)組的每個(gè)元素也是一個(gè)一維數(shù)組 .在內(nèi)存中,多維數(shù)組同樣是一片連續(xù)的存儲(chǔ)區(qū)域,理解下面數(shù)組的存放順序int iMx23=1,2,3,2,5,6;(行優(yōu)先原則 )二維數(shù)組的初始化1、可以在聲明數(shù)組時(shí)用,的方式賦初值, 如int iMx23=1,2,3,2,5,6;2、可以按一維數(shù)組的方式賦值int iMx23=1,2,3,2,5,6;3、可以對行或者列部分賦值int iMx23=1,2,5;4、如

2、果對 數(shù)組全部賦初始值,則行的大小可以省略,列的大小不能省略,如int iMx3=1,2,3,2,5,6;/正確int iMx2=1,2,3,2,5,6;/錯(cuò)誤2. 數(shù)組與指針2.1.字符數(shù)組,字符串字符串是最后一個(gè)元素值為0 的字符數(shù)組。char szText16='h','e','l','l','o','0'char szText2='h','e','l','l','o','0'char szText

3、36="hello"char szText4="hello"char szText5="hello"char *pszText6="hello"/ 注意與char szText5="hello"char szNames8=“l(fā)i ”, ”zhang ”, ” wang”;char *pszNames=“l(fā)i ”, ”zhang” , ”wang” ;的區(qū)別練習(xí)char szTitle=”I love this game” ;char ch2dArray92;char ch2dArray236;/

4、1、將 szTitle中的字符依次填入ch2dArray數(shù)組中 ( 按 ch2dArray00,ch2dArray01,的順序 ),不夠的用0 填充。2、把 ch2dArray的元素依次賦給ch2dArray36;2.2.數(shù)組與指針數(shù)組名 代表數(shù)組中的 第一個(gè)元素的地址,可以將該地址賦值給同數(shù)據(jù)類型的指針,指針賦值以后,可以按照數(shù)組名的方式使用,也可以按照原有指針的方式進(jìn)行訪問。char szText="hello"char *pszTemp;pszTemp=szText;/cout<<"by array:"<<szText1&l

5、t;<endl;cout<<"by pointer array:"<<pszTemp1<<endl;cout<<"by pointer:"<<*(pszTemp+1)<<endl;2.3.數(shù)組與指針示例/ PointerAndArray.cpp : Defines the entry point for the console application./#include <iostream> #include <iomanip>using namespa

6、ce std;int main(int argc, char* argv)int i,j;/*可以將 0 賦值給指針,表示為空指針,但是不許用其他整數(shù)給指針賦值*/void *p=0;/ 或 p=NULL;/void *p=2;錯(cuò)誤/*將數(shù)組地址賦值給指針時(shí),用數(shù)組名和數(shù)組名取地址效果是一樣的(跟函數(shù)指針指向函數(shù)的入口地址一樣!)。*/int iArray=1,2,3;p=iArray;p=&iArray;/*指針變量存儲(chǔ)內(nèi)存單元的地址,通過指針變量對內(nèi)存地址的訪問必須先知道指針變量的類型。比如用字符指針訪問整型變量的各部分的指*/int i1=123;char *pCh1=(char

7、 *)(&i1);*(pCh1+1)=3;/*二維的整型數(shù)組, 例如有一個(gè)2 行、 3 列的二維數(shù)組。該數(shù)組在內(nèi)存中是按順序線性排列,所以等效地當(dāng)作2*3 個(gè)元素的一維數(shù)組。*/int i2dArray23=1,2,3,4,5,6;/*同樣是 2 維的整型數(shù)組,如果在定義的時(shí)候賦值,行下標(biāo)可以由編譯系統(tǒng)自動(dòng)計(jì)算出來, 如果定義的時(shí)候沒賦初值,則行下標(biāo)不能省略。*/int i2dArray23=1,2,3,4,5,6;/*數(shù)組之間不允許直接賦值 , 可以通過內(nèi)存塊拷貝()或單個(gè)元素循環(huán)賦值的方式拷貝數(shù)組中的值*/int i2dArray323;/i2dArray3=i2dArray;/

8、錯(cuò)誤1 使用 memcpy()函數(shù)(內(nèi)存塊拷貝的方式)實(shí)現(xiàn)數(shù)組的賦值;示例代碼:char szText6="hello"char *pszTemp=(char *)malloc(6);memcpy(pszTemp,szText,6);cout<<pszTemp<<endl;free(pszTemp);2 使用單個(gè)元素循環(huán)賦值的方式實(shí)現(xiàn)數(shù)組的賦值;/*可以通過強(qiáng)制類型轉(zhuǎn)換,用指針訪問二維數(shù)組。sizeof操作符計(jì)算出來的是整個(gè)數(shù)組的大小。*/int *pi1;pi1=(int *)i2dArray;cout<<"n= 方式 1:用

9、線性的方式訪問整數(shù)="<<endl;for(i=0; i<sizeof(i2dArray)/sizeof(int); i+)cout<<pi1i<<" "/*下面聲明的是一個(gè)數(shù)組,該數(shù)組有2 個(gè)元素,每個(gè)元素是一個(gè)整型的指針(指針數(shù)組)*/int *piArray2;for(i=0; i<2; i+)piArrayi=i2dArrayi;cout<<endl;cout<<"n= 方式 2:用指針數(shù)組的方式訪問整數(shù)="<<endl;for(i=0; i<2;

10、 i+)for(j=0; j<3; j+)cout<<*(piArrayi+j)<<" "/ 或 cout<<*(*(piArray+i)+j)<<" "cout<<endl;/*下面聲明的是一個(gè)指向整型指針的指針變量,該指針的值是 ( 整型變量指針的地址) 。*/int *ppi;ppi=&(piArray0);cout<<"n= 方式 3:用指針的指針方式訪問整數(shù)="<<endl;for(i=0; i<2; i+)for(j=0

11、; j<3; j+)cout<<*(*(ppi+i)+j)<<" "/ 或 cout<<*(*(piArray+i)+j)<<" "cout<<endl;/*下面聲明的是一個(gè)指針變量,該指針指向的變量是具有3 個(gè)元素的數(shù)組變量。*/int (*piArray2)3;piArray2=&iArray;piArray2=&(i2dArray0);/ 將一個(gè)一維數(shù)組變量的地址賦給piArray2/ 將一個(gè)二維數(shù)組的的第一個(gè)一維數(shù)組變量的制止賦值給piArray2/ 或 piArr

12、ay2=i2dArray;cout<<"n= 方式 4:用數(shù)組指針的方式訪問整數(shù)="<<endl;for(i=0; i<2; i+)for(j=0; j<3; j+)cout<<(*(piArray+i)j<<" "/cout<<*(*( piArray +i)+j)<<" "/跟指向指針的指針輸出方式比較一下,cout<<endl;/*下面表示有3 行 3 列字符的二維字符數(shù)組或者有3 個(gè)元素的字符串?dāng)?shù)組。*/char szArray33

13、="aa","bb","cc"char szArray23="aa","bb","cc"cout<<"n= 用 2 維數(shù)組的方式訪問字符串="<<endl;for(i=0; i<3; i+)cout<<szArrayi<<" "cout<<endl;/*下面表示一個(gè)指針數(shù)組,該數(shù)組存放的是字符數(shù)組的指針或者說是字符串的指針。( 分析與 szArray33內(nèi)存布局的差異。以

14、及pszArray*/char *pszArray="aa","bb","cc"char *pszArray2="aa","bbbbb","cc"cout<<"n= 用指針數(shù)組的方式訪問字符串for(i=0; i<3; i+)和 pszArray2的差異 )="<<endl;cout<<*(pszArray2+i)<<" "cout<<endl;/*下面表示一個(gè)指針,該指

15、針指向的是字符數(shù)組變量, 字符數(shù)組的大小為3 個(gè)字節(jié)( 注意訪問方式與指針數(shù)組相同)*/char (*pszArray3)3;pszArray3=szArray;cout<<"n= 用數(shù)組指針的方式訪問字符串="<<endl;for(i=0; i<3; i+)cout<<*(pszArray3+i)<<" "cout<<endl;/*下面表示一個(gè)指向字符指針的指針變量,或者說是指向字符串的指針( 注意訪問方式與上面兩種仍然相同)*/char *ppsz;ppsz=pszArray;cout

16、<<"n= 用指針的指針的方式訪問字符串="<<endl;for(i=0; i<3; i+)cout<<*(ppsz+i)<<" "cout<<endl;/*最后查看各種變量本身的大小,并自己手工測試對不同的變量怎么賦值進(jìn)去。*/return 0;3. 練習(xí)1、 分別用期的char szWeeks?,char 字符串存儲(chǔ)*szWeeks2?,char *ppszWeeks起來(聲明和賦的方式將值 分 離7 個(gè)表示星開)?!癕on ”,”Tue”,”Wed”,”Thur ”,”Fri”,”S

17、at”,”Sun”2、 已知一字符串?dāng)?shù)組 char szText= ”can i help u ”,用數(shù)組下標(biāo)的訪問方式進(jìn)行反序,并存到數(shù)組 szRevert16 中。3、 已知一字符串?dāng)?shù)組 char szText= ”can i help u ”,用指針訪問的訪問方式進(jìn)行反序,并存到數(shù)組 szRevert16 中。4、 字符串處理函數(shù):/*/功能 : 獲取字符串的長度/輸入 : pszParam-字符指針 (字符串 )/輸出 : 無/返回 : pszParam 字符串的長度/*int StrLen(const char *pszParam);/*/功能 : 字符串拷貝/輸入 : pszDst

18、 -目標(biāo)字符串指針/pszSrc-源字符串指針/輸出 : 無/返回 : 目標(biāo)字符串指針/*char *StrCpy(char *pszDst, const char *pszSrc);/*/功能 : 在源字符串中找子字符串,并返回子字符串在源字符串首次出現(xiàn)處/的指針/輸入 : pszSrc -源字符串/pszSub-子字符串/輸出 : 無/返回 : 子字符串在源字符串首次出現(xiàn)處的指針 ,如果未找到,返回 NULL /*char *FindStr(const char *pszSrc, const char *pszSub);/*/功能 : 從控制臺讀入一字符串到pszParam 中, pszParam 最多能存放/iMaxStrLen 個(gè)字符。根據(jù)控制臺的換行符號和iMaxStrLen/束,回車和換行符號不包含在pszParam 中/輸入 : pszParam-目標(biāo)緩沖區(qū) ,存放輸入的字符。/iMaxStrLen-pszParam 最多能存放的字符數(shù)。/輸出 : 無判斷輸入結(jié)/返回 :pszParam 字符串指針/*char *ReadStr(char *pszParam,int iMaxStrLen);/*/功能 : 從控制臺讀入iStrCount 個(gè)字符串 ,每個(gè)字符串最長為iMaxStrlen,/最后用指針的指針的方式將這組字符串返回。/輸入 : iStrCount-要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論