C語言中二維字符數(shù)組_第1頁
C語言中二維字符數(shù)組_第2頁
C語言中二維字符數(shù)組_第3頁
C語言中二維字符數(shù)組_第4頁
C語言中二維字符數(shù)組_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言中二維字符數(shù)組C語言中二維字符數(shù)組的定義和初始化一般來說,我們可能會希望定義一個(gè)二維字符數(shù)組并且在定義的時(shí)候就用一些字符串來初始化它。比如說:Code:1.chartestcase[30][MAX_LENGTH]={"jo","vicent","tom","honey","gigi","lily","susan","peter","bob","ron",2."jason","henry","kiki","ken","auscar","vivian","yiyi","peace","iron","lotus"3."andy","arta","ophone","denial","pipe","wade","james","kobe","kent","angel"};通常使用二維字符數(shù)組是為了在程序中存儲一些字符串關(guān)鍵字。用這樣的方式來初始化就最簡單不過了。其中,MAX_LENGTH是所有字符串中最大的長度。當(dāng)然不能忘記'\0'了。而定義一個(gè)字符二維數(shù)組,C也提供了簡潔的方式,如果我不想統(tǒng)計(jì)字符串的長度,我還可以這樣定義:Code:1.char*testcase[30]={"jo","vicent","tom","honey","gigi","lily","susan","peter","bob","ron",2."jason","henry","kiki","ken","auscar","vivian","yiyi","peace","iron","lotus"3."andy","arta","ophone","denial","pipe","wade","james","kobe","kent","angel"};也就是說,可以不再數(shù)組定義的時(shí)候指定字符串的長度,但是注意字符串的個(gè)數(shù)是一定要指定的,像這樣寫char**testcase=...是不行的,不過肯定不行了,因?yàn)閕nt*pt=3也不行,呵呵,這兩個(gè)例子是一個(gè)道理啊。我覺得肯定是人都喜歡第二種初始化方法了,而且它還有一個(gè)優(yōu)點(diǎn),起碼對喜歡用指針的同志來說是一個(gè)大優(yōu)點(diǎn)。就是可以將這樣定義的指針賦給一個(gè)二維指針,比如char**pointer=testcase;想形式1的定義方法肯定不能這樣賦值了。不過非常非常值得注意的是,上面定義的兩個(gè)指針,一個(gè)一維,一個(gè)二維,他們必須在const關(guān)鍵字上一致,意思就是說如果定義testcase前面加了const關(guān)鍵字,定義pointer時(shí)也必須加上,否則就會報(bào)錯(cuò):errorC2440:'initializing':cannotconvertfrom'char*[30]'to'constchar**在寫這篇日志的過程中,我突然想到一個(gè)問題,就似乎利用上面的方法二初始化二維字符串?dāng)?shù)組之中,字符串是如何分布的呢?因?yàn)樽址拈L度是不相等的,完全由編譯器來計(jì)算,那么它是會按照最長的字符串來定制字符數(shù)組的長度,還是讓每一個(gè)字符串?dāng)?shù)組都按照自身的大小來占據(jù)內(nèi)存,靠'\0'來識別結(jié)尾呢?二維字符串?dāng)?shù)組的初始化-動態(tài)內(nèi)存分配昨天在用FBS200指紋采集芯片采集到一個(gè)二維數(shù)組數(shù)據(jù)后,利用串口傳輸上來的數(shù)據(jù)是以十六進(jìn)制的數(shù)據(jù)格式表示的二維矩陣,比如"FF"、"BD"、"5C"等等這樣的形式,而對于一幅灰度圖像,一般都是在0~255之間的數(shù)據(jù)來表示其亮度值,因此想通過二維字符串?dāng)?shù)組來對采集過來的數(shù)據(jù)進(jìn)行轉(zhuǎn)化顯示。但在動態(tài)分配一個(gè)char**str;str=newchar*[128];之后對其進(jìn)行初始化時(shí),總是出現(xiàn)錯(cuò)誤,不知道如何才能很好的對其賦值,還得深入學(xué)習(xí)一下。其實(shí)對一個(gè)字符的轉(zhuǎn)化很容易,但對一個(gè)字符串形式的字符來轉(zhuǎn)化,而且是對一個(gè)多維數(shù)組來轉(zhuǎn)化就有點(diǎn)吃力了。首先建立一個(gè)多維字符串?dāng)?shù)組,這里是二維的字符串?dāng)?shù)組,程序如下所示:#include"stdio.h"voidmain(){ char*str1[2][2]={"FF","F9","FA","F9"};//初始化一個(gè)二維字符串?dāng)?shù)組 char*str;//定義一個(gè)一維字符串變量 inta,b; inti,j; intresult1; for(i=0;i<2;i++) { for(j=0;j<2;j++) { str=str1[i][j];//對一維字符串賦值 printf("%s\n",str); if(str[0]>='A'&&str[1]>='A') { a=int(str[0]-'A'); b=int(str[1]-'A'); result1=(a+10)*16+(b+10)*1;//"AA"~"FF"之間的轉(zhuǎn)化結(jié)果 } elseif(str[0]>='A'&&str[1]<'A') { a=int(str[0]-'A'); b='A'-str[1]+1; result1=(a+10)*16+b;//"A0"~"F9"之間的轉(zhuǎn)化結(jié)果 } elseif(str[0]<'A'&&str[1]>='A') { a='A'-str[0]+1; b=int(str[1]-'A'); result1=a*16+(b+10)*1;//"0A"~"9F"之間的轉(zhuǎn)化結(jié)果 } else { a='A'-str[0]+1; b='A'-str[1]+1; result1=a*16+b;//"00"~"99"之間的轉(zhuǎn)化結(jié)果 }一點(diǎn)是動態(tài)分配的優(yōu)點(diǎn),可克服數(shù)組"大開小用"的弊端,在表、排序與查找中的算法,若用動態(tài)數(shù)組,通用性更佳。一定注意:delete[]pc是將n個(gè)字符的空間釋放,而用deletepc則只釋放了一個(gè)字符的空間;②如果有一個(gè)char*pc1,令pc1=p,同樣可用delete[]pc1來釋放該空間。盡管C++不對數(shù)組作邊界檢查,但在堆空間分配時(shí),對數(shù)組分配空間大小是紀(jì)錄在案的。③沒有初始化式(initializer),不可對數(shù)組初始化。6.指針數(shù)組和數(shù)組指針指針類型:(1)int*ptr;//指針?biāo)赶虻念愋褪莍nt(2)char*ptr;//指針?biāo)赶虻牡念愋褪莄har(3)int**ptr;//指針?biāo)赶虻牡念愋褪莍nt*(也就是一個(gè)int*型指針)(4)int(*ptr)[3];//指針?biāo)赶虻牡念愋褪莍nt()[3]//二維指針的聲明指針數(shù)組:一個(gè)數(shù)組里存放的都是同一個(gè)類型的指針,通常我

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論