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陣列 C和C++ 及指標與引用的區別
二維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的二維陣列分配動態