c - 如何通过C中的结构传递矩阵的地址?

标签 c pointers matrix pthreads structure

我正在尝试使用结构将这些矩阵传递给 pthread。

矩阵分配

double **A = (double **)malloc(size_matrix * sizeof(double*));
double **B = (double **)malloc(size_matrix * sizeof(double*));
double **C = (double **)malloc(size_matrix * sizeof(double*));
for(i = 0; i < size_matrix; i++){
    A[i] = (double *)malloc(size_matrix * sizeof(double));
    B[i] = (double *)malloc(size_matrix * sizeof(double));
    C[i] = (double *)malloc(size_matrix * sizeof(double));
}

传递结构

for (t=0; t<thread_num-1; t++) {
    thread_data[t].start = thread_count;
    thread_data[t].end = thread_count + rows_per_thread-1;
    thread_data[t].A_Matrix = *A;
    thread_data[t].B_Matrix = *B;
    thread_data[t].C_Matrix = *C;
    thread_count += rows_per_thread;
}

结构

typedef struct {
int start;
int end;
double *A_Matrix;
double *B_Matrix;
double *C_Matrix;
} thread_data_t;

线程执行的例程。

void *thread_mul(void *arg)
{
thread_data_t *td = (thread_data_t *) arg;
int i,j,k;


for ( i=td->start; i<=td->end; i++) {
    for (j=0; j<size_matrix; j++){
        for(k=0;k<size_matrix;k++){

            td->*C[i][j]+=td->*A[i][k]*td->(*B[k][j]);
        }
    }

}


pthread_exit(0);
}

问题是当例程试图执行时,它没有在

中找到矩阵
td->*C[i][j]+=td->*A[i][k]*td->(*B[k][j]);

我收到一条错误消息,提示它需要介于 -> 和 * 之间的内容。

感谢您的帮助!!

最佳答案

首先,矩阵成员的声明需要有两个星号,因为它是指向指针的指针:

typedef struct {
    int start;
    int end;
    double **A;
    double **B;
    double **C;
} thread_data_t;

语法 td->*C[i][j] 不正确:取消引用运算符(即星号 *)不是必需的,因为方括号 [] 将间接级别降低一个:

td->C[i][j] += (td->A[i][k]) * (td->B[k][j]);

注意:这与您的问题无关,但是如果您需要取消引用存储在 struct 中的指针,您可以将星号应用于表达式的结果,如下所示:*(td->ptrC[i][j])。此处不需要括号,因为 -> 具有更高的优先级,但无论如何我还是将它们放在此处以说明发生了什么。

关于c - 如何通过C中的结构传递矩阵的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25949389/

相关文章:

c - 如何忽略 sscanf 中的已知单词?

c - 使用套接字发送和接收文件

c++ - C/C++ 中字符 ('a' ) 的大小

python - 如何在 python 中向量化一组项目

python - 如何根据每行的多个最大值更新矩阵?

c - 如何在C程序中创建参数文件并在主c文件中使用它

使用指针到指针更改引用

c++ - 为什么这两个整数变量和两个 double 变量(看似)在内存中共享相同的地址?

c++ - 在函数 B 中释放函数 A 的运行时内存

RcppEigen - 这个矩阵乘法有什么问题?