如何定義一個動態的二維數組:
如何定義一個動態的二級指針,看似每個有點C語言基礎的人覺得自己都可以很容易完成,但要正確的完成並且說的明白其中道理不見得就那麼多。
*圖解二維數組:
(ps:指針數組:即用於存儲指針的數組,也就是數組元素都是指針。
int*a[4]; 1.指針數組
2.表示指向數組a的指針
3.元素表示(*a)[i]
數組指針:即指向數組的指針。
int(*p)[n];
1.p是一個指針,指向一個整形的一維數組,這個一維數組的長度是n。
如何將一個二維數組賦給一個指針:
int a[9][10];//一個二維數組
int (*p)[10];//定義一個數組指針,指向含10個元素的一維數組
p=a; //將該二維數組的首地址賦給p;也就是a[0]或a[0][0]
p++; //p++即p=p+1;也就是p跨過了a[0][ ]指向了a[1][ ]。)
兩種定義二維數組的方式,訪問數據的方式,優缺點:
方法一:
定義方式:
int **p=new int*[10];
for (int i=0;i<=10;++i)
{
p[i]=new int[10];
}
訪問數據的方式:直接通過a[i][j]訪問第i行第j列的數據。
優缺點:通過a[i][j]訪問數據容易,但是new的次數太多,釋放空間不容易。
方法二:
定義方式:
int *p=new int[10*10];(ps:這種事當成一維數組連續開闢的。)
*圖例:(看&p[9]和&p[10]等地址相差爲4個字節,即它們是相連的,所以爲一維數組)
訪問數據的方式:通過a[i*10+j]來訪問第(i*10+j)個數據。
優缺點:訪問數據很方便,且new的次數少,釋放空間容易,但是不便於理解。