關於c語言動態分配二維陣列的問題

時間 2022-02-03 01:30:17

1樓:匿名使用者

如果要求行列都是動態的話,最簡單的辦法就是這樣,n行m列:

int **p = (int**)malloc(sizeof(int*)*n);

for (int i = 0; i < n; i++)p[i] = (int*)malloc(sizeof(int)*m);

然後就可以這樣傳遞:

void f(int **p)

f(p);

不過用完了還要一個一個的去free

for (int i = 0; i < n; i++)free(p[i]);

free(p);

2樓:仙戈雅

#include

#include

void mal(int (*p)[3]);int index=0;

// 將p動態變成3行3列的二維陣列(它原先是指向3個元素的一維陣列)

if((p=(int(*)[3])malloc(9*sizeof(int)))==null) // 動態分配二維陣列

// 賦值

for (i=0;i<3;i++)

for(j=0;j<3;j++) p[i][j]=val[index++];

// 列印

for (i=0;i<3;i++)

}int main()

3樓:匿名使用者

malloc函式是用來分配記憶體空間的,返回值是所分配空間的起始地址(也就是指標)。對陣列資料的訪問可以通過下標訪問 也可以通過指標訪問,其實從某種意義上說這兩種訪問都是一樣的。不知道樓主這個二維陣列是用來幹什麼的?

所以不好回答你的問題!

4樓:

#include

int main()

5樓:匿名使用者

1、比如一個5行3列的char型別2維陣列,這樣分配:

char* newarray=(char*)malloc(5*3*sizeof(char));//在程序堆記憶體上分配15個char大小

... ...

2、在本函式中引用:比如對第2行第2列的元素賦值:

*(newarray+2*2)=6;//第2行第2列的元素賦值為6... ...

3、在函式中呼叫,只需要傳遞陣列首地址newarray:

int test(void* array)//申明一個函式,該函式需要一個陣列的地址

... ...

void main()

4:依次賦值操作:

for(int index=0;index<15;index++)

c語言如何動態分配二維陣列??

6樓:

一、二維資料的記憶體空間動態分配

方法一:

首先arr是一個二級指標,為arr分配xdim空間,每一維都是一個指向陣列的指標,且每個陣列內部的地址空間是連續的,但是陣列之間的地址空間沒有連續性。

這種分配方法在記憶體中的佈局如下:

方法二:

這種方法相當於動態分配了一個一維的連續的空間,然後讓相應的陣列指標指向某些固定的位置達到呼叫的目的。

這種分配方法在記憶體中的佈局如下:

二、二維資料的記憶體空間釋放

對於第一種分配方式需要一個一個釋放,對第二種方式只要分配兩個指標即可。

三、完整**

7樓:匿名使用者

使用malloc函式,先分配第一維的大小,然後再迴圈分配每一維的大小。

示例**,分配3行4列二維陣列:

#include

#include

int main()

//初始化

for (i = 0; i < 3; ++i)}//輸出測試

for (i = 0; i < 3; ++i)printf ("\n");

}//釋放動態開闢的空間

for (i = 0; i < 3; ++i)free(a);

return 0;}/*

輸出:0 1 2 3

1 2 3 4

2 3 4 5*/

8樓:

假設你要定義3行4列的陣列

int **a;

n=3,m=4;

a=(int**)malloc(n*sizeof(int*));

for(j=0;j

a[j]=(int*)malloc(m*sizeof(int*));

釋放的時候也要先釋放列後釋放行

for(j=0;j

free(a[j]);

free(a);

a=null;最後給他賦個零。

ok分給我吧

9樓:匿名使用者

如果p是這樣char **p;定義的。

那好像*p=(char **)malloc(1000*sizeof(char *));要改成p=(char **)malloc(1000*sizeof(char *));

c語言中二維陣列如何申請動態分配記憶體

10樓:匿名使用者

1、使用malloc函式,先分配第一維的大小,然後再迴圈分配每一維的大小。

2、例程,分配3行4列二維陣列:

#include

#include

int main()

//初始化

for (i = 0; i < 3; ++i)}//輸出測試

for (i = 0; i < 3; ++i)printf ("\n");

}//釋放動態開闢的空間

for (i = 0; i < 3; ++i)free(a);

return 0;}/*

輸出:0 1 2 3

1 2 3 4

2 3 4 5*/

c語言 動態分配 二維陣列的問題

11樓:

m是第一維,那就是有m個具有n個元素的一維陣列構成的二維陣列。這**也對,是你理解反了!

關於c語言動態分配二維陣列的問題? 15

12樓:匿名使用者

#include

#include

int main()

c語言,動態分配記憶體(二維陣列)輸入資料時為什麼會彈出對話方塊?求網友指點?

13樓:岔路程式緣

for(i=0;i{ for(j=0;j改成:

for(i=1;i{ for(j=1;j因為你根本沒有給i=0分配地址,所以出錯。

修改後的程式如下:

#include

#include

int main(void)

{int **a,i,j;

int n;

scanf("%d",&n);

a=(int**)malloc((n+1)*sizeof(int*));

for(i=1;i<=n;i++)

a[i]=(int*)malloc((n+1)*sizeof(int));//分配記憶體的時候是

for(i=1;i

14樓:匿名使用者

你在輸入的時候迴圈用的是:

for(i=1;i

for(j=1;j

輸出的時候是:

for(i=0;i

for(j=0;j

訪問到了並沒有分配記憶體的指標:a[0]。

把輸出的迴圈改成和輸入一樣就能解決。

c語言中怎麼動態分配陣列?

15樓:xys感悟

#include

int main () {

int *arr;

int len = 200;

int i;

arr = (int*)malloc(sizeof(int) * len);

for (i=0; i

16樓:匿名使用者

#include

#include

int main(void)

for (i = 0; i < 10; i++)free(a);/*動態分配的空間需要用free()函式釋放*/return 0;

怎麼實現c語言裡面陣列的動態分配?

17樓:風若遠去何人留

1 定義指標。

2 使用malloc函式分配記憶體。

3 對陣列進行訪問即可。

對於一維動態陣列,直接定義一維指標,並分配記憶體空間即可。

比如int型別的10個元素動態陣列,寫作

int *a;

a = (int *)malloc(sizeof(int) * 10);

如果是多維陣列,需要從高維向低維逐層分配。如二維陣列10*100空間。

int **a;

int i;

a = (int **) malloc(sizeof(int *) * 10); // 先分配10個int*的空間。

for(i = 0; i < 100; i ++)

a[i] = (int *)malloc(sizeof(int) * 100); // 對於每個int*,分配100個元素的空間。

18樓:施小平

/* 這是一維陣列,二維陣列類似

int **p= (int**)malloc(m*sizeof(int*) );

int i ;

for(i = 0; i < m; i++)vc6.0中通過

*/ #include

#include

void main()

printf("\n");

for(i=0;i

printf("\n");}

19樓:匿名使用者

#include

int **a = (int**)malloc(sizeof(int*) *m);

int i ;

for(i = 0; i < m; i++)

20樓:匿名使用者

全都malloc不free?有你們的

C語言二維陣列的排序問題,c語言二維陣列

不是。這麼說吧,陣列名本身就是指標,指向陣列的第一個元素。至於你所說的呼叫呼叫二級 二維吧 陣列,難道不是如普通變數般直接呼叫嗎?根據問題補充說,這是不允許的,main 函式的形參是固定的不能傳遞指標。而一般的自定義函式只能用傳遞首地址的形式來傳遞二維陣列,例子如下 定義 int a x y int...

關於C語言定義二維陣列的問題,c語言關於定義二維陣列的問題

以下能正確定義二維陣列的是 以下能正確定義 陣列的是 去掉二維兩字 a int a 3 語法錯,沒帶初始化,不允許用 空白 不允許 陣列大小不定。b int a 正確定義了陣列,是一維陣列,陣列元素只有1 個,初始化數值為 2 3 就是 6。c int a 3 語法錯,花括號裡沒填初始化數值。d i...

C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題

巢琨瑜 float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型...