1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
我想2D阵列(结构MATRIX)分成结构MATRIX 的阵列给出CHUNKSIZE CS: 假设CS为2, 答案是
Seg[0]:
1 2
1 2
1 2
Seg[1]:
3 4
3 4
3 4
....
Seg[3]:
7 8
7 8
7 8
这里是我的矩阵结构:
typedef struct MATRIX {
int nrow;
int ncol;
int **element;
} MATRIX;
,这里是该函数的方式隔开它们:
void SegmentMatrix(MATRIX input,MATRIX* segs,int Chunksize, int p) {
int i,j,r;
//Allocate segs
for (i = 0; i<p;i++)
{
CreateMatrix(&(segs[i]),input.nrow ,Chunksize,0);
}
//Now Copy the elements from input to the segs
//where seg0 takes from 0 to cs cols of a, and all their rows, and seg1 takes from cs to 2cs ...
printf("Stats:\n\t P: %d\t CS: %d\n",p,Chunksize);
for (r = 0; r<p; r++) {
for (i = 0; i<input.nrow;i++) {
for (j = r*Chunksize; j<r*Chunksize+Chunksize-1; j++) {
//I tried (&(segs[r]))->element... Doesn't work, produces wrong data
segs[r].element[i][j] = input.element[i][j];
}
}
PRINTM(segs[r]);
}
}
注意PRINTM基本上打印矩阵,它知道通过检查SEGS [R] .nrow和NcoI 和CreateMatrix采用以下输入的限制(&矩阵,行数,列数,填充类型)以及内部的malloc。
filltype:
0- generates zeroth matrix
1- generates identity
else A[i][j] = j; for simplicity
的问题是,如果我打印矩阵SEGS [我],他们都下来有没有新增加的值由CreateMatrix给出的默认值,和。
澄清: 好了,如果你们检查SegmentMatrix功能,去年PRINTM,它输出矩阵仿佛for循环没有发生,又名,我可以删除for循环,并会得到相同的输出。 。 难道我错了这条线(从SegmentMatrix拍摄)
Segs[r].element[i][j] = input.element[i][j];
你打电话给PRINTM的地方是否会出现错误的输入?我希望看到在上面的代码中提到,以确保它在马类型问题之前不是购物车。 – 2013-05-13 19:03:44
如果你看SegmentMatrix中的最后一个语句,你会看到PRINTM,它显示了seg的默认值,就好像整个for循环没有发生 – zellwwf 2013-05-13 21:11:03
@MichaelDorgan希望解释它 – zellwwf 2013-05-13 21:22:00