1. 程式人生 > >二維陣列、指標詳解

二維陣列、指標詳解

二維陣列、指標詳解:

1.研究二維陣列的表示。

首先,用程式碼執行進行測試,驗證的相關結果,

// C.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include <iostream>
using namespace std;



int main()
{
	int a[3][4] = { { 1,  3,  5,  7},
	                { 9, 11, 13, 15}, 
	                {17, 19, 21, 23}
	              };


	cout <<"   a    "<< endl;
	cout << a << endl << endl;


	cout << "   a[0]           *(a+0)          *a" << endl;
	cout << a[0] << "        " << *(a+0) << "        " << *a << endl << endl;


	cout << "   &a[1]           a + 1       " << endl;
	cout << &a[1] << "        " << a + 1 << endl << endl << endl;


	cout << "   a[1]           *(a + 1)       " << endl;
	cout << a[1] << "        " << *(a + 1) << endl << endl;


	cout << "   a[1] + 2        *(a + 1) + 2       " << endl;
	cout << a[1] + 2 << "        " << *(a + 1) + 2 << endl << endl << endl;


	cout << " *(a[1] + 2)      *(*(a + 1) + 2)       " << endl;
	cout <<"   "<<    *(a[1] + 2) << "               " << *(*(a + 1) + 2) << endl << endl;





	return 0;
}

得到結果:

由此可以得出如下結果【仔細看清池一下的表格】:

雖然打印出來的結果一樣,但是其含義不同,其資料型別可能不一樣。且指標接收的值,不是說傳遞一個地址進去就可以得。還要其型別對應的上。指標之所以為派生型別,是因為其必須依靠基本資料型別才能夠使用(參見本人的這篇部落格資料型別、儲存結構、static、extern)。

二維陣列a有關的指標
  含義

地址

資料型別
a 二維陣列名,指向一維陣列a[0],即0行的首地址 008FFAA4 int (*)[4]
a[0],  *(a+0), *a 0行0列的地址 008FFAA4 int *
&a[1],  a+1 1行首地址  008FFAB4 int (*)[4]
a[1],  *(a+1) 1行0列元素,a[1][0]的地址  008FFAB4 int *
a[1]+2,  *(a+1)+2 1行2列元素,a[1][2]的地址 008FFABC int *
*(*a[1]+2),  *(*(a+1)+2) 1行2列元素,a[1][2]的值 13  

 

 

 

 

 

 

 

2.現在研究關於二維陣列和指標的關係

怎麼賦初值呢? 給一個二維陣列。

正確賦值方式:

方式一:int(*p)[4] = a; 

方式二:int(*p)[4] = &a[0];


容易錯誤的方式

錯誤一:int(*p)[4] = a[0];     

  

錯誤二:int(*p)[4] = &(a[0][0]);

那麼由此可以得出結論,重點來了,敲黑板!!!【可以參考C程式設計 p250】
a[0], a[1], a[2]的型別為 int * 型別(指向整型變數);

而a的型別為 int (*)[4],指向 含有四個元素的 一維陣列。

感覺此表比較重要,重點是容易理解。再回顧一遍。[和上面的是同一個表]