指標(Poiner)與陣列(Array)的運用在二維陣列上 - 囈語、敘事

文章推薦指數: 80 %
投票人數:10人

這幾天為了要寫一個二進制搜尋(Binary Searching)又複習了一下指標與陣列的使用。

為了怕以後忘記不好找,就寫上來吧!變數(Variabel)可以看成盒子, ... 關閉廣告 囈語、敘事、兩三事... 跳到主文 心情隨筆... 部落格全站分類:心情日記 相簿 部落格 留言 名片 Aug31Wed201112:43 指標(Poiner)與陣列(Array)的運用在二維陣列上 這幾天為了要寫一個二進制搜尋(BinarySearching)又複習了一下指標與陣列的使用。

為了怕以後忘記不好找,就寫上來吧!變數(Variabel)可以看成盒子,每個盒子可以有自己的名字,也就是每個變數都可以為它命名。

而盒子可以裝東西,PC只認得數字,所以裡面只能存放數字,至於文字,其實PC還是轉換成數字來識別的。

INTVAR=123;   INT->變數的型態是整數(INTEGER),也就是這個盒子只能裝整數的數字,這邊就是123這個數字。

陣列(Array)其實是一連串組成的變數。

INTARRAY[5];也就是一共有5個疊串在一起的盒子,每個盒子都是裝整數用的,這一串盒子的名字就叫做ARRAY。

看起來就像這樣有注意到我把箭頭移到第一個盒子上方了嗎?這個等下就會說到了。

如果想拿第三個盒子的內容要怎麼拿呢?因為從0開始算起,所以要寫成VAR=ARRAY[2];就可以了。

指標(Pointer)的內容其實是位址(Address)如果我們把整個記憶體當作盒子來看的話,指標就像是上圖的箭頭了。

DOUBLE*Ptr=0x00;指得是有一個指標ptr,指向DOUBLE的指標。

看起來就像這樣指標的內容其實就像是"第幾個"盒子一樣,可以算到第幾個盒子,就是所謂的可以定址到多少的意思囉。

想要取出盒子的內容時,加上*就可以了,也就是VAR=*ptr;那DOUBLE指標跟INT指標有何不同?因為DOUBLE的長度大小是INT的兩倍,所以當DOUBLE指標每移動一步,距離就是兩個INT的大小。

ptr++;VAR(整數型態)=*ptr;會發生什麼事?正確答案是,會發生編譯警告。

此時的*ptr取出的值應該是2233(有些會跑出3322,這是BigendianorLittleendian的問題,也就是高位址高放或高位址低放),是DOUBLE型態。

但是由於VAR卻是整數型態,而不是裝DOUBLE這種大小用的盒子,所以編譯器會警告你。

而如果強制這樣做的話,VAR的內容就是33or22了(視編譯器而定)有沒有發現?Pointer與Array似乎有異曲同工之妙。

如果我們把ptr=ARRAY,ptr的內容就是ARRAY第一個盒子的位址(Address),所以這種陳述常被使用,方便利用Pointer來存取陣列裡的各元素。

承前述INTArray[5]={0,1,2,3,4};INT*ptr;ptr=ARRAY;ptr+=2;*ptr會取出2ARRAY[2]也會取出2所以是可以交替使用的甚至可以寫成ptr[2]來使用,不過陣列就不能反過來加*使用了喔!陣列也可以宣告成二維以上的,也就是ARRAY2D[5][5]這樣,其實記憶體是連續一串的,宣告成二維等於只是把一維的組裝成二維。

看起來就像這樣這樣應該可以了解,不管是幾維的陣列,其實都可以是一維陣列的延伸與組合罷了。

現在要進入重點了。

既然我們常用*ptr來替代ARRAY[],那麼ARRAY2D[][]可以也用指標來替代嗎?這就是很多初學者會搞不清楚的地方,網路上也很多初心者詢問二維陣列與指標交替的問題。

事實上,使用雙重指標(**dptr),跟二維陣列(ARRAY[][])是不一樣的。

還記得嗎?指標(Pointer)其實是"箭頭",內容其實是位址(Address),所以(**dptr)是一個指標指另向一個指標。

以例子來說,也就是箭頭會指出第幾個盒子,而指出的盒子裡面放的也是箭頭,可以指出第幾個盒子。

ARRAY[][]則是已經直接指名要第幾個盒子了。

這才說它們果真是不相同的。

那麼,如果就是想使用指標來替用怎麼辦?INTARRAY2D[num1][num2];其實可以用INT(*ptr)[num2];這樣就可以了。

這樣的意思是,有一個陣列,長度為num2,這是一個型態為INT的指標陣列,也就是陣列的每個元素都是一個指標。

(可以由右往左來解釋)最重要的是,這個ptr每移動一步,就是一個num2的距離。

(prt+1)-ptr的大小就是一個num2要針對ARRAY2D來運用的話,就是ptr=&ARRAY2D;VAR=(*(pAlphabet+X))[Y];/*可以取出值*/X->相對於陣列的第一維Y->相對於陣列的第二維這樣是不是很清楚了! 全站熱搜 創作者介紹 flotan 囈語、敘事、兩三事... flotan發表在痞客邦留言(1)人氣() 全站分類:不設分類個人分類:電子此分類上一篇:coLinux的小技巧 上一篇:東瀛-台場、淺草寺、秋葉原和明治神宮 下一篇:東瀛秋楓-Nagatoro 歷史上的今天 2009:2009各公司分紅概況 ▲top 留言列表 發表留言 近期文章 最新迴響 文章彙整 文章彙整 2017二月(1) 2017一月(1) 2016十一月(1) 2016五月(2) 2016四月(3) 2015十二月(1) 2015六月(1) 2015五月(2) 2013五月(1) 2013二月(1) 2012十二月(1) 2012六月(2) 2011十一月(1) 2011八月(2) 2011七月(1) 2011六月(2) 2011五月(2) 2011四月(2) 2011一月(2) 2010十二月(2) 2010十一月(1) 2010十月(2) 2010九月(1) 2010八月(1) 2010七月(1) 2010四月(1) 2010二月(1) 2010一月(2) 2009十二月(1) 2009十一月(2) 2009十月(9) 2009九月(3) 2009八月(12) 2009七月(13) 2009六月(16) 2009五月(7) 2009四月(11) 2009三月(7) 2009二月(8) 2009一月(3) 2008十二月(5) 2008十一月(7) 2008十月(8) 2008九月(3) 2008八月(2) 2008七月(3) 2008三月(1) 2008二月(1) 2007十二月(4) 2007十一月(8) 2007十月(2) 2007九月(4) 2007八月(4) 2007六月(2) 2007四月(2) 2007三月(6) 2005九月(1) 2005八月(3) 2005七月(1) 所有文章列表 文章分類 學習(3) 電子(3)費登奎斯(Feldenkrais)(1)NLP&Hypnology(35) Travel(3) 失落的王朝-吳哥(10)中國大陸(5)日本(5) 投資理財(5)飲食大欲(5)TheGame(12)Reference(0)囈語書摘(30)未分類文章(89) 我的連結 成長學習 NLP-無限潛能的操作祕技NLP,催眠與故事NLP.全腦學習.夢工作..生命樹~*~*~JohNSoNiN台東~*~*~WellspringWithinMars’Blog王紫光醫師的blogSashya老師-Feldenkrais 生活點滴 操盤手的修練SmartMoney投資日誌amatol76薔薇色的人生 參觀人氣 本日人氣: 累積人氣: 新聞交換(RSS) 回到頁首 回到主文 免費註冊 客服中心 痞客邦首頁 ©2003-2022PIXNET 關閉視窗



請為這篇文章評分?