怎樣動態建立二維陣列並初始化?c追加懸賞

時間 2022-06-09 14:00:05

1樓:匿名使用者

我貌似沒有明白a和t是什麼關係?我假設你說的a和t是同一個東西我嘗試幫你解決:

void get_v(const int m,const int n,float **p)//這裡傳入了一個指向二維陣列指標的指標(假設這個二維陣列名為base)

for(int i=0;i

for(int j=0;j

...............}

c++如何動態建立二維陣列?

2樓:匿名使用者

float(*cp)[9][8]; //

cp=new float[8][9][8];//

第一條語句是申明陣列指標,即cp指向一個float型的陣列。

第二條語句是開闢了一個的三位陣列空間,將首地址賦給指標cp ,再給cp的操作也就是對float[8][9][8]這個地址空間操作。多出的一個8只是將二維陣列[9][8]的空間擴大了8被,用指標操作其實是一樣的,比如要取第20個元素就直接 float f = *(cp+20-1)

下面是網上找的比較詳細的解釋,應該比較明瞭了

int (*p)[10];

定義了一個陣列指標,這個指標與一般的指標沒有什麼區別,僅僅是這個指標指向一個陣列。這裡我們把陣列作為了基本的元素處理。也就是說,將整個陣列作為一種型別,而陣列名就是這個型別的一個具體變數。

例如:int a[10];

一個陣列型別,形狀就是這樣:int [10];a就是新定義的一個變數。

int b[3];

一個陣列型別,形狀就是這樣:int [3];b就是新定義的一個變數。

因為這兩個型別形狀不一樣,因此是兩個不同的型別,因此a,b就是不同型別的變數。這就好比int a和double b :a和b不一樣。不知道大家是否已經對陣列型別有了基本的印象?

那麼把陣列名作為該陣列型別的一個具體變數,我們就可以定義指向這個變數的指標,即陣列指標。

對於陣列型別:int [10],我們可以定義一個指標,int (*p) [10].注意這裡一定要加上小括弧。

否則就會變成了指標陣列。定義了指標之後,我們可以對該指標賦值,如p=&a;如果定義了一個二維陣列,int c[3][10]。我們可以認為定義了一個一維的陣列,這個陣列有三個int[10]的元素。

因此和一般的陣列一樣,我們可以將該陣列名賦給指標,其實也就是第一個元素的地址付給指標。即: p=c;或者p=&c[0]。

其餘情況以此類推。

3樓:du瓶邪

一維陣列是指標,可將二維陣列看作是指標的指標:

每一行是一個一維陣列,而列是指向行的指標,在動態建立時,先分配指向行的指標空間,再迴圈維每一行申請空間。

#include

using namespace std;

int main()

//賦值,

k=0;

for(i=0;i

}//顯示剛才的賦值

for(i=0;i

cout << endl;

}//刪除剛才申請的記憶體

for(i=0;i

delete p;

return 0;

4樓:匿名使用者

c++使用vector方便生成:

#include

#include

#include

using namespace std;

int main()

return 0;}

5樓:亂舞風雲

int**a=new int *[len1+1];

for(int i=0;i<=len1;i++)

a[i]=new int [len2+1];

6樓:匿名使用者

直接用new語句就可以了

c++怎麼定義一個動態二維陣列

7樓:天方夜譚的哆啦a夢

#include

#include

#include

#definerank10

#definecolumn7

intmain()

inti,j;

int(*p)[column];

//動態生成二維陣列,指定列數為column,如果想改,可以進行修改

//的引數,如果想定義n行2列就為:p=(int(*)[2])malloc(n*2*sizeof(int));

p=(int(*)[column])malloc(rank*column*sizeof(int));//動態申請n行column列的二維陣列

for(i=0;ifor(j=0;jp[i][j]=i*j;

for(i=0;ifor(j=0;jprintf("%d,",p[i][j]);

printf("\n");

free(p);

system("pause");

return0;

擴充套件資料

定義一個三維陣列:

intx[3][4][5];

定義了一個三維陣列,陣列的名字是x,陣列的長度為3,每個陣列的元素又是一個二維陣列,這個二維陣列的長度是4。

並且這個二維陣列中的每個元素又是一個一維陣列,這個一維陣列的長度是5,元素型別是int。多維陣列在實際的工作中使用不多,並且使用方法與二維陣列相似。

8樓:go陌小潔

用new申請空間;

再在對每個數進行初始化;

//動態定義和初始化二維陣列 部分**

cout<<"輸入二維陣列的行,列 :";

cin>>row >>col ;

int **p2 ;

p2 = new int*[row] ;

for( i = 0 ; i < row ; i ++ )p2[i] = new int[col] ;

//輸入二維陣列的值

for( i = 0 ; i < row ; i ++ )for( j = 0 ; j < col ; j ++ )p2[i][j] = rand() % 10 ;

//輸出二維陣列

cout<<"輸出二位陣列:"<

for( i = 0 ; i < row ; i ++ )//釋放二維陣列

for( i = 0 ; i < row ; i ++ )delete p2[i] ;

delete p2 ;

9樓:匿名使用者

#include

typedef vector> matrix;

這樣matrix就是二維陣列了,可以用push_back()動態往裡面新增元素 ,不用預先定義陣列大小

10樓:

int row, col;

cin >> row >> col;

int** ptr = new int* [row];

for(int i=0; i

for(int j=0; j

11樓:倒黴熊

int x,y,**p;

cin>>x>>y;

p=new int*[x];

for(int i=0;i

p[i]=new int[x];

12樓:不宜然

int **parray;

parray = new int8[5];

for (int i=0 i<5; ++i)for (int i=0; i<5; ++i)delete parray;

c++ 如何給double型二維陣列動態初始化

13樓:xz巨集定義

c++中用new動態建立二維陣列的格式一般是這樣:

type (*p)[n] = new type [n];

其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type*[n],即是指向一個有n列元素陣列的指標。

還有一種方法,可以不指定陣列的列數:

int **p;

p = new int*[10]; //注意,int*[10]表示一個有10個元素的指標陣列

for (int i = 0; i != 10; ++i)

這裡是將p作為一個指向指標的指標,它指向一個包含10個元素的指標陣列,並且每個元素指向一個有5個元素的陣列,這樣就構建了一個10行5列的陣列。

當陣列使用完畢,釋放空間的**是:

for(int i = 0; i != 5; i++)

delete p;

處理二維陣列,可以用降維或是二維法。

降維法是用一位陣列來接受二維陣列,將二維元素的首地址&a[0][0]作為引數,傳遞給函式,函式用int *接受。

二維法就直接用二維陣列來接受,但是需要指定列數。

14樓:匿名使用者

double **array;

array = new double*[row];

for (int i = 0; i < row; ++i)其中row為行數,col為列數

c++ 怎樣動態初始化有二維陣列的結構體

15樓:匿名使用者

結構體這裡

struct mgraph

然後定義處

mgraph *g = new mgraph();

對於網友採納答案的質疑:

不知道你是如何坦言「不能用「這三個字的?首先,c++中結構體和類唯一的區別在於預設的訪問許可權不同,其餘完全一樣。其次,int *p = new int(5),請問我的new新建的是類還是int型變數?

最後,既然用了c++,就不要在用malloc這種c語言的機制了。不知道不要裝。

最後對於網友採納的答案,附一段可編譯執行的**,質問關於new不能用於分配記憶體給結構體

16樓:夜禮服假面

不能用new,new是對類的操作。

mgraph *g;

g = (mgraph*)malloc(

sizeof(mgraph));

17樓:匿名使用者

g = new mgraph;

c++ 二維陣列如何初始化為0

18樓:du瓶邪

#include

using namespace std;

int main()

cout<

c++ 也可以寫:

int a[10][8];

簡單的就是 :memset(a,0,sizeof(a));

19樓:匿名使用者

例如 int a[3][4];

a[0][0]='0'

這樣寫第一個元素初始化為0,其餘也會初始化為0還有一種就是

memset(要初始化的陣列,初始化的值,要初始化的長度(位元組));

20樓:匿名使用者

for(int l=0;l<10;l++)原理如樓上所述,不贅述~~

c++當然可以直接定義多維陣列了,

是c#不可以直接定義多維陣列。

21樓:

補充一下用memset函式要在開頭加上 #include

還有new了後面要delete

22樓:匿名使用者

貌似只能用1樓的方法。

23樓:匿名使用者

#include

using namespace std;

int main()

cout<

} return 0;

} 參考程式

c++ 也可以寫

int a[10][8];

簡單的就是 :memset(a,0,sizeof(a));

24樓:

int **a=new int*[10](); //加上() 將初始化為0

int **a=new int*[10]; //無初始化

c++ 如何動態建立陣列

25樓:

定義陣列時,陣列的大小必須為常量,即在編譯時就要存在的數值,如:int arr[5];

當陣列大小要根據程式的執**況確定時,可採用建立動態陣列的形式,如:

int x(10);

char* test = new char [x];

動態建立的陣列,在程式結束之前一定要釋放記憶體,否則會造成記憶體洩漏,如:delete test

C如何給double型二維陣列動態初始化

xz巨集定義 c 中用new動態建立二維陣列的格式一般是這樣 type p n new type n 其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type n 即是指向一個有n列元素陣列的指標。還有一種方法,可以不指定陣列的列數 int...

c語言程式 定義二維陣列int m 3並初始化,完整題目如下

include int main void file fp 寫入操作 fp fopen data w 以只寫方式開啟檔案 fwrite m,sizeof m 1,fp 寫入資料 fclose fp 關閉檔案 開啟操作 int newm 3 3 int i,j fp fopen data r 以只讀方...

利用c 中的vector建立動態二維陣列

vector為c 中的一個容器類,其功能相當於動態陣列。使用vector需要包含標頭檔案vector。vector的常用操作 1.v.push back t 在容器的最後新增一個值為t的資料,容器的size變大。另外list有push front 函式,在前端插入,後面的元素下標依次增大。2.v.s...