1. 程式人生 > >C/C++建立二維陣列/指標陣列

C/C++建立二維陣列/指標陣列

三個方法:

1.用兩層vector模版直接做。
2.用一維陣列模擬二維,即int * p = new int [x * y];分配一個x * y大的陣列,然後要用的時候把二維下標對映到一維中,這樣做的最大好處是,分配的陣列空間是連續的,像一個真正的二維陣列,缺點是用起來不像二維陣列,得做下標對映。
3.先分配一組指向陣列的指標,然後為每一個指標賦值,使它指向一塊分配出來陣列。這樣做的好處是用起來(語法上)像二維陣列,但實際上分配的記憶體不像二維陣列,它不能保證記憶體是連續的。這種做法delete時要用迴圈別忘了。
指標陣列就是這樣呀:
int ** p = new int *[10];

---------------------------------------------------------------------------------------------------------------------------------------

-----------

//用new建立一個二維陣列,有兩種方法,是等價的
一:
int (*p)[10] = new int[5][10];
二:
int **p = new int[5];
for(int i=0;i<5;i++)
    p[i] = new int[10];

//指標陣列的建立,也有兩種方法
一:
char *pa = new char[4];
for (int i=0;i<4;i++)
{
    pa[i] = new char[8]; //為每個指標都分配8個char元素空間。
}
二:
char *pa[4];//可以不用new建立
for (int i=0;i<4;i++)
{
    pa[i] = new char[8]; //為每個指標都分配8個char元素空間。


}


//delete二維陣列
for(int i=0; i<5; ++i)
    delete [] p[i];
delete []p;

//delete指標陣列
一:
for(int i=0; i<4; ++i)
    delete [] pa[i];
delete []pa;
二:
for(int i=0; i<4; ++i)
    delete [] pa[i];

---------------------------------------------------------------------------------------------------------------------------------------

------------------------

相關推薦

C/C++建立陣列/指標陣列

三個方法: 1.用兩層vector模版直接做。2.用一維陣列模擬二維,即int * p = new int [x * y];分配一個x * y大的陣列,然後要用的時候把二維下標對映到一維中,這樣做的最大好處是,分配的陣列空間是連續的,像一個真正的二維陣列,缺點是用起來不像二

動態建立vector陣列 CC++ 及指標與引用的區別

二維vectorvector<vector <int> > ivec(m ,vector<int>(n));    //m*n的二維vector動態建立m*n的二維vector方法一:vector<vector <int>

C++用new建立陣列的方法

問題來源 在C++中,陣列可以被視為一種型別——但是,不存在‘二維陣列’這種型別。二維陣列本身會被解釋成一個一維陣列:這個陣列的元素型別為另一種一維陣列。比如int[2][3]這個二維陣列,它會被編譯器視作一個元素型別為‘int[3]’的一維陣列。並且,‘int[3]’和'int[4]'會被當成

C++ vector之建立陣列

標頭檔案: #include <iostream> #include <algorithm> #include <vector> using namespace std; 申明二維陣列: vector<vect

C 語言中陣列指標詳解

C語言中,指標是一個複雜但又靈活多變的知識點,我們知道,在一維陣列中,對於一個數組a[],*a,a,&a,都表示a的首地址,但如果與二維陣列混合使用,就顯得更為複雜了。例如對於一個二維陣列  a[2][4]={{1,2.3},{4,5,6}}  a+i,&a

C/C++函式返回陣列指標問題

方法1:需要對指標有較好的理解int(*f())[2]{int (*m)[2]=new int[2][2];m[0][0]=1;m[0][1]=0;m[1][0]=2;m[1][1]=0;return m;}//總感覺這種函式定義很怪,可以使用typedef重定義下型別,如

9、C語言中陣列陣列名及指向陣列指標變數

#include <stdio.h> #include <stdlib.h> //與二維陣列相關的指標變數([] 比 *優先順序高) //在一般指標變數指向二維陣列,或者n維陣列,要直接操作a[i][j],對指標的操作必須有兩個符號(其中不出現&,如果有&則相應的加

c語言中如何使用malloc()函式在堆上建立陣列

首先附程式碼: #include <stdio.h>#include <stdlib.h>main()  //建立5行6列的陣列{int ** p, i;p = (int **)malloc( sizeof(int*) * 5 );    //也可以

C語言】陣列解魔方陣

解題思路: 魔方陣的排列規律如下(思路來自網際網路): 注意:剛開始我也沒看懂,但是相信我多看幾遍理解已經能看懂的。 如3×3的魔方陣:      8   1   6  &nbs

c++求一個整數陣列中最大子陣列之和(結對作業)

題目:返回一個二維整數陣列中最大子陣列之和。 要求: 1.輸入一個二維整形陣列,數組裡有正有負。 2.二維陣列中連續的一個子矩陣 組成一個數組,每個子陣列都有一個和。 3.求所有子陣列的和的最大值。 結對程式設計要求 兩人結對完成程式設計任務。 一人負責程式分析,程式碼程式設計。 一

C++中有關陣列的問題

1.[錯誤] 無法將 “int () [3]” 轉換為 “int () [100]”, 用於引數 “1” 到 “void 替換” (int (*) [100], int, int) " 問題:無法直接將int a[][]作為引數 原因:二維陣列中是按一行一行進行儲存,儲存在連續的記憶體地址中

C++中有關陣列

[錯誤] 無法將 “int () [3]” 轉換為 “int () [100]”, 用於引數 “1” 到 “void 替換” (int (*) [100], int, int) " 問題:無法直接將int a[][]作為引數 原因:二維陣列中是按一行一行進行儲存,儲存在連續的記憶體地址中。如

C語言傳遞陣列

方法一, 形參給出第二維的長度。 例如: #include <stdio.h> void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr[%d] = %s/n"

C++ 動態申請陣列陣列傳參

以往在C++的學習中我們知道: int *ptr = new int; 這樣可以動態分配一個int型指標 int *ptr = new int[3]; 這樣可以動態分配一個一位陣列 但是如何動態分配一個二維陣列呢?像這樣: int *ptr = new int[3][3] ?執行

C語言)陣列按行分別排序

//傳遞“指標陣列”方法#include <stdio.h> //排序函式,分別對每一行的元素進行排序 void sort(int *a[],int row,int col) { int i,j,k,temp; for(i=0; i<row; i++) {

C#如何獲取陣列的行列數

本來是想在unity2D中利用二維陣列儲存平面上網格佔用情況的。忽然發現忘了怎麼獲取二維陣列的行列數了,在這裡記錄一下這些函式(雖然完成任務也可不依靠這些函式)。 在二維陣列中我們可以利用GetUpperBound()來獲取行列數。 例子如下 namespace T

PTA - C程式設計 NoA - 陣列 (10道題)

應該是第10次上機題目了,本次共10道題(由於具體輸入輸出的樣例題目中都有,就不在部落格裡佔篇幅複製貼上了,只把題題目和要求賦值過來): 7-1 求矩陣的區域性極大值 7-2 矩陣運算 7-3

c++動態分配/三陣列的記憶體

轉自http://blog.csdn.net/boylinux/article/details/7783871 本文主要目的是用c和c++分別實現動態分配二、三維陣列。一般而言,在C中用malloc和free實現,而在C++中用new和delete。 new和delete是

C語言基礎-----陣列,三陣列

一 二維陣列 1.二維陣列的定義: 資料型別  陣列名[行][列] ={ 數值1,數值2......}; 2.二維陣列有幾行,就代表有幾個一維陣列. int a[2][3] = {1,2,3,4,5,

C語言為陣列動態分配記憶體的問題

C語言中動態分配一位陣列是很簡單的,但是沒有可以直接對二維陣列進行動態分配的函式,因此,要相對二維陣列動態分配記憶體,便要藉助於一位陣列來實現,具體如下: 假設要為一個n*m的二維陣列分配動態