我必須做這個練習:如何在C中動態分配一個矩陣?
在C中執行一個管理名爲「M」的整數矩陣和名爲「L」的整數列表的應用程序。 M是用戶動態選擇n的方矩陣[nxn]。然後執行此功能:
- 序列化:給定「M」矩陣它返回帶有n^2個元素的列表L.列表中的元素是從第一個到第二個按行排序的M的元素。
第二功能:
- 反序列化:給定的列表L,其中n^2層的元件,它返回一個矩陣[nxn的]與由列排序的L個元素。
所以main()
必須是:
- 用戶得到矩陣(n)的尺寸和填充一些整數的矩陣。
- 然後調用序列化功能,打印清單連載
- 值5添加到列表
- 的每一個值,並呼籲反序列化功能
- 並打印最後一個函數給出的矩陣。
我已經試過
(所有分配必須是動態)這樣的:
#include <stdio.h>
#include <stdlib.h>
int main(){
int n,i,j;
printf("Give the dimension of matrix [nxn]: ");
scanf("%d",&n);
int **M;
M = (int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++){
M[i] = (int*)malloc(n*sizeof(int*));
}
int *L = serialize(M,n);
int size = n*n;
for(i=0;i<size;i++){
printf("L[%d]= %d",i,L[i]);
}
for(i=0;i<size;i++){
L[i] = L[i]+5;
}
int **M2 = deserialize(L,n);
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n;j++){
printf("%d",M2[i][j]);
}
}
free(M);
free(M2);
free(L);
}
int serialize(int** M,int n){
int *L;
int i,j;
int size = n*n;
L = (int*)malloc(size*sizeof(int));
for(i =0;i<size;i++)
L[i]=M[i/size][(int)i%size];
return L;
}
int deserialize(int* L,int n){
int** M;
int i,j;
M = (int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++){
M[i] = (int*)malloc(n*sizeof(int*));
}
int size = n*n;
for(i=0;i<size;i++)
M[i/size][i%size]=L[i];
return **M;
}
編譯器給我的錯誤:
Esercizio.c: In function ‘main’:
Esercizio.c:22: warning: initialization makes pointer from integer without a cast
Esercizio.c:31: warning: initialization makes pointer from integer without a cast
Esercizio.c: At top level:
Esercizio.c:43: error: conflicting types for ‘serialize’
Esercizio.c:22: error: previous implicit declaration of ‘serialize’ was here
我能做些什麼?
int serialize(int ** M,int n);不需要int *? – JackTurky 2012-03-11 15:55:32
從你的代碼看來,它確實如此,我的錯誤。 – MByD 2012-03-11 15:56:12
確定它有效,但結果是:給出矩陣[nxn]的維數:2 L [0] = 0L [1] = 1L [2] = 0L [3] = 0 0 0爲什麼L是總是0? – JackTurky 2012-03-11 16:02:05