我有一个问题,我认为可能有一个简单的答案,但我没有找到任何文件证实我的怀疑。
我的程序是乘以两个方形矩阵,整个代码有点长,所以我只是粘贴下面的相关部分。编译代码时,我不断收到“错误:赋值中的不兼容类型”消息。我正在尝试使用a,b和c的相应部分分配子矩阵suba,subb,subc。这是因为我使用变量v和w int 28 - 32行吗?另外,为了确保我有正确的概念,如果我将矩阵的左上角分配给“子矩阵”,那么我只是指定一个指针(如subb)从大的指定位置开始矩阵,对吗?
提前感谢您的帮助!它是IMMENSELY appreiciated
struct threads
{
pthread_t id; //The thread id to use in functions
int n; //size of block
float **suba; //Sub-matrix a
float **subb; //Sub-matrix b
float **subc; //Sub-matrix c
};
int main( int argc, char* argv[ ] )
{
int n; // dimension of the matrix
int p; // number of threads in the program
float *sa, *sb, *sc; // storage for matrix A, B, and C
float **a, **b, **c; // 2-d array to access matrix A, B, and C
int i, j;
struct threads* t;
t = ( struct threads* ) malloc( p * sizeof( struct threads ) );
int x = -1;
int z;
for( z = 0; z < p; z++ )
{
t[ z ].n = n / sqrt( p );
if( fmod( z, sqrt( p ) ) == 0 )
x++;
int w = ( int )( x * n / sqrt( p ) );
int v = ( int )( fmod( z, sqrt( p ) ) * n / sqrt( p ) );
t[z].suba = a[ w ][ v ];
t[z].subb = b[ w ][ v ];
t[z].subc = c[ w ][ v ];
//pthread_create( &t[ z ].id, 0, threadWork, &t[ z ] );
}
return 0;
}
答案 0 :(得分:1)
t[z].suba
的类型为float **
a[w][v]
的类型为float
。
t[z].suba[w][v] = a[w][v]; ?