首頁(yè) 現(xiàn)實(shí)

程序媛養(yǎng)成計(jì)劃

第二十三章 輪回法則(上)

程序媛養(yǎng)成計(jì)劃 任煦之秋 2132 2020-04-26 21:10:36

  「和一維數(shù)組一樣,二維數(shù)組同樣有兩種初始化方式,一種是一次性把所有數(shù)據(jù)都放進(jìn)去,比如說(shuō)這里的地圖數(shù)據(jù):

  int map[8][8]={

  {0, 0, 3, 3, 3, 0, 0, 0},

  {0, 0, 3, 4, 3, 0, 0, 0},

  {0, 0, 3, 0, 3, 3, 3, 3},

  {3, 3, 3, 2, 0, 2, 4, 3},

  {3, 4, 0, 2, 1, 3, 3, 3},

  {3, 3, 3, 3, 2, 3, 0, 0},

  {0, 0, 0, 3, 4, 3, 0, 0},

  {0, 0, 0, 3, 3, 0, 0, 0}};

  從這種表示方法也可以推斷出老爹跟你說(shuō)的,二維數(shù)組其實(shí)就是一個(gè)一維數(shù)組,只不過(guò)它的每個(gè)元素也是一個(gè)以為數(shù)組。

  第二方式就是一個(gè)一個(gè)的往數(shù)組里面放數(shù)據(jù),例如:

  map[0][1]= 1;

  代表的編號(hào)為0的小袋子里面的第一元素是1,以此類推?!?p>  「那可不可以向大袋子里面一個(gè)一個(gè)的裝小袋子呢?」

  我突發(fā)奇想道。

  「在C語(yǔ)言里面按照正規(guī)操作是不可以的哦!」

  老爹意味深長(zhǎng)地笑道。

  「那非正規(guī)方式呢?」

  我賊兮兮地問(wèn)道。

  「這個(gè)得等到你學(xué)了指針再說(shuō)?!?p>  老爹似乎早就知道我會(huì)有此一問(wèn),于是輕描淡寫地就把我給打發(fā)了。

  「哼!」

  我斜著眼睛白了老爹一眼。

  「既然已經(jīng)說(shuō)到了數(shù)組,那就順帶把字符串也給說(shuō)了吧。還記得你寫的第一個(gè)輸出『hello world』的程序么?」

  「當(dāng)然記得咯!」

  「那還記得『hello world』當(dāng)時(shí)是放在什么符號(hào)里面的么?」

  「雙引號(hào)!」

  我在心里默默地將hello world程序給寫了一遍。

  「準(zhǔn)確的說(shuō)是英文雙引號(hào),在C語(yǔ)言中,英文雙引號(hào)就代表一個(gè)字符串,字符串中的內(nèi)容就是雙引號(hào)里面的內(nèi)容,現(xiàn)在我們來(lái)研究一下『hello world』這個(gè)字符串。

  char str[]=“hello world“;

  猜猜上面這個(gè)字符數(shù)組str的長(zhǎng)度是多少?!?p>  「哼!事出反常必有妖,既然你讓我猜,說(shuō)明真實(shí)的長(zhǎng)度絕對(duì)不是表面上數(shù)的那么多,按照字符數(shù),長(zhǎng)度本來(lái)應(yīng)該是10。嗯……我猜11!」

  我思索了一下,然后不怎么確定地報(bào)出了自己的答案。如果說(shuō)是10,那肯定會(huì)錯(cuò)!

  果不其然,老爹臉上露出了一絲驚訝的表情。

  「居然被你蒙對(duì)了,其實(shí)上面的定義和這句代碼等效:

  char str[]={'h','e','l','l','o','','w','o','r','l','d','\0'};

  最后一個(gè)字符叫做反斜杠零,是字符串的結(jié)束符。計(jì)算機(jī)一旦檢測(cè)到這個(gè)字符,就算后面還有字符,也不會(huì)在進(jìn)行相關(guān)操作了。

  還有,這個(gè)反斜杠叫做轉(zhuǎn)義符,用來(lái)啟動(dòng)或者關(guān)閉一些字符的特殊功能?!?p>  「嗯?奧特曼的變身器?」

  「可以這么理解,我舉個(gè)例子吧,還記得反斜杠n么?這個(gè)時(shí)候反斜杠就啟用了字符n的特殊功能——換行,于此相似的還有反斜杠b、t、r等,還有剛剛說(shuō)到的反斜杠0?!?p>  「上面的是開啟特殊功能,那關(guān)閉怎么說(shuō)呢?」

  「剛剛說(shuō)了,雙引號(hào)代表的是一個(gè)字符串,也就是說(shuō),雙引號(hào)是具有特殊意義,那如果我們需要在字符串中使用雙引號(hào)怎么辦?比如說(shuō)要輸出這句話:『Dad said:“C is very fun!“』。」

  「哈哈,你都說(shuō)了用反斜杠關(guān)閉它的特殊功能啊,多半就是這樣了吧:

  printf(“Dad said:\“C is very fun!\““);」

  看著我敲出來(lái)的代碼,老爹笑著拍了拍手。

  「玥玥啊,你有沒(méi)有發(fā)現(xiàn)在取數(shù)組元素的時(shí)候好像有點(diǎn)問(wèn)題?」

  老爹一邊說(shuō),一邊露出了他那讓人抓狂的笑容。

  一般老爹這么說(shuō),那肯定是意有所指。

  「老爹你先前說(shuō)無(wú)論是往數(shù)組里面放數(shù)據(jù),還是從數(shù)組里面取數(shù)據(jù),都要靠數(shù)組的編號(hào),這樣看來(lái),的確可以把數(shù)組中的每一個(gè)元素都取出來(lái)。

  但是如果數(shù)組的元素太多,一個(gè)一個(gè)的取也是一個(gè)很大的工程量啊。況且要一個(gè)一個(gè)的取的話,對(duì)于加載地圖的時(shí)候完全沒(méi)有幫助嘛!」

  我腦袋飛速運(yùn)轉(zhuǎn),開始分析當(dāng)前存在的問(wèn)題。

  老爹滿意地點(diǎn)了點(diǎn)頭,然后說(shuō)道:「分析得不錯(cuò),那接下來(lái)就跟你說(shuō)說(shuō)混沌先民中掌握了輪回法則的兩尊大神——for和while。」

  「輪回法則?」

  我眼睛一亮,從老爹的話中捕捉到了一些信息。

  「不錯(cuò),這兩位可是有大能耐,當(dāng)它們施展輪回法則的時(shí)候,會(huì)讓它們所在的那片空間的時(shí)間停止,直到輪回法則結(jié)束?!?p>  「聽起來(lái)好有意思的樣子!」

  「既然如此,那么我們先用一個(gè)具體的小例子來(lái)說(shuō)明它們的用法。

  比如說(shuō)現(xiàn)在我一個(gè)長(zhǎng)度為1000的int型數(shù)組,需求是每一個(gè)元素的值就是它的在數(shù)組中的編號(hào)。

  如果沒(méi)有輪回法則的話,我們就只能這樣:int arr[1000]={0, 1, 2, 3……,998, 999};

  或者這樣:

  int arr[1000];

  arr[0]= 0;

  arr[1]= 1;

  ……

  arr[999]= 999;

  費(fèi)勁不?」

  「老費(fèi)勁了!」

  「但是有了for和while,我們就很容易就能做到了,先說(shuō)for:

  for(int i = 0; i < 1000; i++)

  {

  arr[i]= i;

  }」

  「這……這就完了?」

  這回輪到我無(wú)語(yǔ)了,這相差也太大了吧?

  「簡(jiǎn)單吧?現(xiàn)在來(lái)跟你說(shuō)說(shuō)這是什么意思。

  for(輪回開始;輪回條件;輪回變數(shù))

  {

  每次輪回執(zhí)行的內(nèi)容

  }

  當(dāng)for輪回啟動(dòng)的時(shí)候,首先會(huì)執(zhí)行輪回開始,在上面的例子中,我們?cè)谶@個(gè)地方聲明了一個(gè)名為i的int型變量,并為它初始化值為0。接下來(lái)for就會(huì)檢查輪回條件,如果條件為真,它就要執(zhí)行每次輪回都要做的事情,咱們這里向數(shù)組編號(hào)為i的元素賦值為i。此時(shí)i = 0,0當(dāng)然是小于1000的,于是for執(zhí)行輪回的內(nèi)容,將編號(hào)為0(i = 0)的元素賦值為0(i=0)。

  當(dāng)每次輪回的事情做完后,for就要執(zhí)行輪回變數(shù),我們要它將i加1,所以這個(gè)時(shí)候i就從0變成了1。

  接下來(lái)for又要去檢查輪回的條件是不是滿足,1小于1000成立,于是執(zhí)行輪回內(nèi)容:將編號(hào)為1(i = 1)的元素賦值為1(i=1),然后執(zhí)行輪回變數(shù), i從變成了2。

  然后一直就是判斷條件->執(zhí)行內(nèi)容->執(zhí)行變數(shù)->判斷條件……

  直到i=999的時(shí)候。

  當(dāng)for執(zhí)行完本次的輪回內(nèi)容,即:將編號(hào)為999(i = 999)的元素賦值為999(i=999)后,再執(zhí)行變數(shù),i就從999變成了1000。

  這個(gè)時(shí)候for再去判斷輪回條件的時(shí)候,i等于1000并不小于1000,輪回條件不成立,結(jié)束輪回?!?

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁(yè)
返回書頁(yè)
指南