回覆列表
  • 1 # Afczdgv

    二維陣列和指標⑴ 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。一個二維陣列在計算機中儲存時,是按行儲存的,即先儲存第一行的元素,再儲存第二行的元素。當把每一行看作一個整體,即作為一個大的陣列元素時,原來的二維陣列也就變成一個一維陣列了。而每個大陣列元素對應原來二維陣列中的一行,稱為行陣列元素,顯然每個行陣列元素都是一個一維陣列。下面討論二維陣列元素和指標之間的對應關係,清楚了二者之間的關係,就能用指標處理二維陣列了。設p是指向二維陣列a[M][N]的指標變數,若有:p=a[0]; 則p+j將指向a[0]陣列中的元素a[0][j]。由於a[0]、a[1]┅a[M-1]等各個行陣列依次連續儲存,則對於a陣列中的任一元素a[i][j],指標的一般形式如下:p+i*N+j用"*"運算子表示為:*( p+i*N+j)同樣,a[i][j]也可使用指標下標法表示,如下:p[i*N+j]例如,有如下定義:int a[3][4]={{10,20,30,40,},{50,60,70,80},{90,91,92,93}};則陣列a有3個元素,分別為a[0]、a[1]、a[2]。而每個元素都是一個一維陣列,各包含4個元素,如a[1]的4個元素是a[1][0]、a[1][1]、a[1]2]、a[1][3]。若有:int *p=a[0];則陣列a的元素a[1][2]對應的指標為:p+1*4+2元素a[1][2]也就可以表示為:*( p+1*4+2)用下標表示法,a[1][2]表示為:p[1*4+2]特別說明:對上述二維陣列a,雖然a[0]、a都是陣列首地址,但二者指向的物件不同。a[0]是一維陣列的名字,它指向的是一維陣列a[0]的首元素a[0][0],對其進行“*”運算,得到的是一維陣列元素a[0][0]的值,即*a[0]與a[0][0]是同一個值。而a是一個二維陣列的名字,它指向的是二維陣列a的首元素a[0],對a進行“*”運算,得到的是一維陣列a[0]的首地址,即*a與a[0]是同一個值。它的指標移動單位是“行”,所以a+i指向的是第i個行陣列,即指向a[i]。當用int *p;定義指標p時,p的指向是一個int型資料,而不是一個地址,因此,用a[0]對p賦值是正確的,而用a對p賦值是錯誤的。這一點請務必注意。示例:#include

  • 中秋節和大豐收的關聯?
  • 為什麼男女結婚了叫新人,那麼她們沒結婚前都做了一些什麼事呢?(光棍怎麼來的呢?)?