【发布时间】:2019-04-18 20:10:46
【问题描述】:
我正在尝试使用指针将一个大的随机矩阵 (NxN) 和一个随机向量 (N) 相乘。 为什么我会收到错误类型“二进制*的无效操作数(有'double *'和'double *')”? 错误似乎在 ptr3[i][j] = ptr3[i] + ptr1[i] * ptr2[k]; 但我不知道为什么这不起作用。 我是 C 新手,所以我仍然不能很好地得到指针。
int main ()
{
time_t t;
double **ptr1, **ptr2, **ptr3;
int i, j, k;
int N = 500;
ptr1 = (double **) malloc (sizeof (double *) * N);
ptr2 = (double **) malloc (sizeof (double *) * N);
ptr3 = (double **) malloc (sizeof (double *) * N);
for (i = 0; i < N; i++)
ptr1[i] = (double *) malloc (sizeof (double) * N);
for (i = 0; i < N; i++)
ptr2[i] = (double *) malloc (sizeof (double) * N);
for (i = 0; i < N; i++)
ptr3[i] = (double *) malloc (sizeof (double) * N);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
ptr1[i][j] = rand ();
}
}
for (i = 0; i < N; i++) {
*ptr2[i] = rand ();
}
t = clock();
for (i = 0; i < N; i++) {
ptr3[i] = 0;
for (k = 0; k < N; k++)
ptr3[i] = ptr3[i] + ptr1[i][k] * ptr2[k];
}
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC;
printf("Tempo: %f segundos \n", time_taken);
printf ("\n");
return (0);
} ```
【问题讨论】:
-
如消息所述:在
ptr3[i][j] = ptr3[i] + ptr1[i] * ptr2[k];中,ptr3[i][j]是double值,但其他三个是指针,加/乘它们没有意义。 -
还要注意,您将
ptr2设为像ptr1和ptr3这样的二维数组,而不是叙述中提到并在循环中初始化的一维数组。 -
贴出来的代码好像被修改了,没有评论。
-
这看起来像是一个“流沙”问题。请复制/粘贴您的实际代码并保留,以便 cmets 和答案保持相关性。
标签: c matrix vector multiplication