接下來我們要結合指標跟
陣列的用法,那我們可以把指標指向一個陣列的起始位置,然後呢
那個存取這個陣列裡頭的元素,那基本上用法是長得像這樣子,我們每個陣列,比如說100 整數
然後我們有一個指標啊,變數iptr, 它的初始值我們可以把它宣,把它設為array,
記不記得我們以前在說, 這個array 如果說後面加了方括號後面寫 6 的話是表示第6 個,但如果不寫的話,就表示這個是
array 的起點,所以我們把array 的起點指定給 iptr 的話,那iptr 就跟array 的起點就重合到了。
所以我們就可以用 iptr 加一個 star 去取值,然後拿到array 裡頭的第一個元素也就是
array[0] 好,這個就,把這兩個作一個整合,基本上陣列就是 連續記憶體的位置,指標變數就是可以指到
記憶體位置的一個變數,所以如果說你把它
指到這個陣列的第一個起點然後再去取值的話,自然就取到陣列的第一個元素了。
那,指標也可以像那個, 像那個整數變數一樣做一個加加,那這什麼意思呢就是加一,
這個加一並不是真正的加一,也就是說加一個元素。
我們可以這樣想像啊,我們現在指標呢就像是說是第幾棟房子,所以你指標加一
意思是說下一棟房子,而不是說真的是加一公尺兩公尺這種事情,所以我們這個指標呢是可以
往後算,加一個,所以是一個元素的大小啊,一個元素
的大小,那指標呃,比如說以整數來講啊, 那它的大小是 4,所以以加加的話,事實上它的值是在加
4,但是你可以把它寫成加加啊,那它就會加到下一個啊,那如果是 double 的話,比如說就像這個
是就會加 8 一樣會指向下一個元素。所以我們 當寫上這個iptr 加加的時候實際上就是指標往後跳
一個元素那麼大,那這個元素是什麼意思呢,就是你當初宣告這個iptr 的時候,
說它是哪一種資料形態,比如說整數就會跳一個整數,浮點數就會跳一個浮點數。像這樣子 所以我們就可以寫出這種
code 來啊,這個是把那個陣列跟指標跟這個指標加加 做一個結合啊,所以我們一個陣列啊裡面有五個元素,直接放
a 然後我們有一個指標是i ,然後有一個值那個呃,
那個變數值,有一個那個呃,指標的變數是ptr 啊ptr,
我們首先把這些變數讀進來,把這個陣列裡頭的五個元素讀進來,在這裡頭呢,我們是讀 1,2,3,4,5,
讀這五個進來啊,然後呢我們就開始做這個動作。
這些我們都會看得很清楚,i 等於0,i 小於5, i++,
這我們都可以理解,那這個ptr 什麼意思呢,我們加一個逗點 那叫ptr 就是說這兩個事情都會做啊,所以我們初始化
的動作是到從這裡到這裡結束啊,我們把point 指到a 意思就是說我們這個指標變數呢,
從此是指到a 的起點這裡啊,然後i 小於 i ++,這是做五次,然後我們這裡有一個
ptr++,所以每次迴圈的時候, 這個 ptr 一開始指到第零個元素,再來指到第一個元素,這個元素就要一直下去啊,所以我們每一次
啊,就把它印出來,就是說這個ptr 大於印出來。把 point
印出來,然後呢,把point 指到的位置呢把它加3,啊把它加3。
這就是把它印出來啊,所以整個程式是蠻簡單,就是這樣做 這樣的動作,它就利用一個指標一開始指到這個陣列的頭,
然後每一次呢移到下一格,然後每一次把下一,把那一格呢把它加3,就這麼
簡單。所以一開始初始化部分呢有包括這個ptr=a 意思就是說讓for
迴圈開始的時候ptr 會指向a0, 然後每一次呢就變 a1,a2 這樣一直就往下跳啊往下跳,那這邊
有特別注意就是說一直到n 可以加3 啊加3,所以我們啊,真正
執行的時候會變成這樣子,這五行是那個呃,在那個 這裡的時候印出來的,就是說你把它位置印出來,ptr
每次,不是每次加加啦我們看看會發生什麼變化啊,就是說第一是 90 第二94,97,9c,a0,這樣一直往,一次跳四格。為什麼
跳四格呃?因為我們現在處理的是 integer pointer, integer pointer 呢 是
integer 一次要跳一格integer 那麼大,一格 integer 多大? 4個byte 所以這樣跳。
那這樣每次加上一個1,2,3,4,5 就加成4,5,6,7,8 了,
就是在這裡做的啊,它每次指到的地方加,去把它加3,所以我們沒有對
a 直接做動作,但是a 提供一串連續記憶體位置, 讓pointer
能夠從頭到第一個到第二個這樣一直往下跳,去裡面做加3 這個動作。
等於c,我們等一下把a 印出來的時候就這樣加到了,我們看一個圖比較容易理解。
pointer 一開始是指到啊90 這個位置,然後再往下 94, 98,9c,a0,這樣一直下去,它本來指
1,2,3,5 它第一是指到這裡,好就把它加 4,第二是指到這裡,第三是指到這裡,第四指到這裡,第五是指到這裡
它每次說的東西就是pointer 指到的位置把它加3, 好,所以各位可以,可以了解這個,這個code 在這裡,這一行啊。
好,有這樣動作的話,它就把後面那個3,後面那個每一個變數啊,
每一格由這個,這個變數加上3,所以1,2,3,4,5 出來以後就變成 4,5,6,7,8。
所以這個第一是指這裡,第二是指這裡,這樣一直這樣下去。
它每一次跳多少,跳4,雖然我們ptr++ 看起來是加 1 實際上是加一格,加一個integer 這麼大。