我試圖寫函數matricopy應該複製一個矩陣,但是編譯器會抱怨:如何複製C中的矩陣?
/* minmatrix.c - test rows and columns of a matrix
* Copyright abandoned. This file is in the public domain. */
#include <stdio.h>
#define ROWCOUNT (3)
#define COLUMNCOUNT (4)
int imat[ ROWCOUNT ][ COLUMNCOUNT ];
char cmat[ ROWCOUNT ][ COLUMNCOUNT ];
double dmat[ ROWCOUNT ][ COLUMNCOUNT ];
int rmat[ ROWCOUNT ][ COLUMNCOUNT ];
void matriscopy (int * destmat, int * srcmat, int rowcount, int columncount)
{
int i, j;
for (i=0; i<rowcount; i=i+1) /* rad-nr */
for (j=0; j<columncount; j=j+1) /* kolumn-nr */
destmat[i][j] = srcmat[i][j];
}
int main()
{
int i; int j;
int * ip; char * cp; double * dp;
for(i = 0; i < ROWCOUNT; i = i + 1)
for(j = 0; j < COLUMNCOUNT; j = j + 1)
{
imat[ i ][ j ] = 10000 + 100*i + j;
cmat[ i ][ j ] = 10*i + j;
dmat[ i ][ j ] = 1.0 + i/100.0 + j/10000.0;
rmat[ i ][ j ] = 0;
};
printf("\n Examining imat:\n");
for(ip = &imat[ 0 ][ 0 ];
ip <= &imat[ ROWCOUNT - 1 ][ COLUMNCOUNT - 1 ];
ip = ip + 1)
printf("memory at: %lx contains value: %d\n", (unsigned long) ip, *ip);
printf("\n Examining cmat:\n");
for(cp = &cmat[ 0 ][ 0 ];
cp <= &cmat[ ROWCOUNT - 1 ][ COLUMNCOUNT - 1 ];
cp = cp + 1)
printf("memory at: %lx contains value: %d\n", (unsigned long) cp, *cp);
printf("\n Examining dmat:\n");
for(dp = &dmat[ 0 ][ 0 ];
dp <= &dmat[ ROWCOUNT - 1 ][ COLUMNCOUNT - 1 ];
dp = dp + 1)
printf("memory at: %lx contains value: %f\n", (unsigned long) dp, *dp);
/* Add a statement here to call your matriscopy function. */
printf("\n Examining rmat:\n");
for(ip = &rmat[ 0 ][ 0 ];
ip <= &rmat[ ROWCOUNT - 1 ][ COLUMNCOUNT - 1 ];
ip = ip + 1)
printf("memory at: %lx contains value: %d\n", (unsigned long) ip, *ip);
return(0);
}
我得到這個錯誤:
$ cc minmatrix.c
minmatrix.c: In function ‘matriscopy’:
minmatrix.c:18:17: error: subscripted value is neither array nor pointer nor vector
minmatrix.c:18:32: error: subscripted value is neither array nor pointer nor vector
你能幫我明白了嗎?
您可以將該矩陣與memcpy複製,可能比這些循環稍微便宜。 – Benj
http://stackoverflow.com/questions/16004668/c-allocating-a-matrix-in-a-function/27366086#27366086 以上你會發現一個程序,我已經做了功能分配和操縱矩陣在任何C(gcc C11/C99)的可能方法。也許它會有用4u ... – 42n4