2014-11-05 83 views
0

我有一個程序在C中順序乘以矩陣,我試圖完成。我收到標題中列出的錯誤。無效的操作數爲二進制*(有'雙*'和'雙*')

這裏是給我麻煩的行:

C[i,j] = C[i,j] + A[i,k] * B[k,j]; 

A,B,和C是2維陣列。它們用以下代碼定義:

A = (double **) malloc(sizeof(double *)*n); 
for (r = 0; r < n; r++) { 
    A[r] = (double *) malloc(sizeof(double)*n); 
} 

B和C的定義與此相同。 n是一個整數值,它定義了列和行的大小。

我不知道爲什麼我得到這個錯誤。從我看過的其他一些問題來看,當操作的類型不正確時出現此錯誤,但我不明白爲什麼會出現這種情況。有沒有人有任何想法?

+2

[不投的malloc(朋友)的結果(http://stackoverflow.com/q/605845)。 – Deduplicator 2014-11-05 18:47:06

+3

數組索引不需要逗號。 – wildplasser 2014-11-05 18:48:50

+0

@Deduplicator當我進行搜索時,這並沒有出現。謝謝你指出我。 – redeagle47 2014-11-05 18:49:10

回答

3

沒有多指標索引運營商在C.

你有什麼是真正的單索引與包含逗號運算符的表達式。

逗號運算符總是返回其第二個參數。

因此,使用正常索引兩次,而不是嘗試在那裏塞進第二個索引。

C[i,j] = C[i,j] + A[i,k] * B[k,j]; 

等同於:

C[j] = C[j] + A[k] * B[j]; 

不給你彷彿想:

C[i][j] = C[i][j] + A[i][k] * B[k][j]; 

順便說一句,Don't cast the result of malloc (and friends)

A = (double **) malloc(sizeof(double *)*n); 

應該是少容易出錯:

A = malloc(n * sizeof *A); 
+0

我想我一定是從我正在看的算法中複製過來的。感謝您的幫助。 – redeagle47 2014-11-05 18:53:16

+0

是的,那些僞碼算法通常使用更多的數學符號。另外,如果你真的閱讀過這樣的東西,那麼你的閱讀能力就會大大提高。 – Deduplicator 2014-11-05 18:56:14

2

C[i,j]相當於C[j]。在此上下文中的i,j被視爲值爲最後一個表達式的逗號運算符。

而不是

C[i,j] = C[i,j] + A[i,k] * B[k,j]; 

使用

C[i][j] += A[i][k] * B[k][j]; 
相關問題