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?有你們的 不是。這麼說吧,陣列名本身就是指標,指向陣列的第一個元素。至於你所說的呼叫呼叫二級 二維吧 陣列,難道不是如普通變數般直接呼叫嗎?根據問題補充說,這是不允許的,main 函式的形參是固定的不能傳遞指標。而一般的自定義函式只能用傳遞首地址的形式來傳遞二維陣列,例子如下 定義 int a x y int... 以下能正確定義二維陣列的是 以下能正確定義 陣列的是 去掉二維兩字 a int a 3 語法錯,沒帶初始化,不允許用 空白 不允許 陣列大小不定。b int a 正確定義了陣列,是一維陣列,陣列元素只有1 個,初始化數值為 2 3 就是 6。c int a 3 語法錯,花括號裡沒填初始化數值。d i... 巢琨瑜 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 型...C語言二維陣列的排序問題,c語言二維陣列
關於C語言定義二維陣列的問題,c語言關於定義二維陣列的問題
C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題