C++中如何正確的開闢一個動態的二維數組

如何定義一個動態的二維數組:


        如何定義一個動態的二級指針,看似每個有點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的次數少,釋放空間容易,但是不便於理解。

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章