首先,值的陣列(例如int m1[3][3]
)不等同於指針數組以type int
(例如int **m1;
)。
接着,傳遞數組給一個函數時(而不是指針類型的數組),則必須通過每個維度除了行數。 (第一個)。所以你的情況,你可以通過他們的,addMatrix (float m1[3][3]...)
,或通過列addMatrix (float m1[][3]...)
)
的數量在您嘗試在C添加任何東西,你必須初始化或一組你所加在一起的價值。當你通過m1
和m2
添加矩陣時,它們是未初始化的。 (它會像一盒巧克力)。初始化並呼籲addMatrix
之前設置m1
和m2
值。
你不能,除非你是返回一個指針的內存一個動態分配的內存塊的函數內返回本地創建一個數組。在C中的所有收益都是單值(它可以是一個單一的指針更復雜的東西)在這裏您return type
爲addMatrix
是錯誤的。您需要通過m3
至addMatrix
來保存添加的結果。因此,回報也可能是void
(或其他表示成功/失敗的其他單個值)。例如: -
void addMatrix (float m3[][3], float m1[][3], float m2[][3], int x)
最後,我知道我可能已經忘記了什麼東西,除非你正在嘗試使用變長數組,你聲明的數組必須具有恆定值,而不是變量。要做到這一點,並有辦法來方便地改變整個代碼值的最簡單方法,就是在代碼的開頭以創建尺寸的#define
。
把所有的一起,你可以這樣做以下:
#include <stdio.h>
#define DIMXY 3
void addMatrix (float m3[][DIMXY], float m1[][DIMXY], float m2[][DIMXY], int x)
{
int i, j;
for (i = 0; i < x; i++) {
for (j = 0; j < DIMXY; j++) {
m3[i][j] = m1[i][j] + m2[i][j];
}
}
}
int main()
{
int i, j, x = 3;
float m1[DIMXY][DIMXY] = {{0}}; /* always initialize arrays to zero */
float m2[DIMXY][DIMXY] = {{0}};
float m3[DIMXY][DIMXY] = {{0}};
/* now fill m1 & m2 -- otherwise "what are you adding?" */
for (i = 0; i < x; i++)
for (j = 0; j < DIMXY; j++) {
m1[i][j] = i + j + 1;
m2[i][j] = m1[i][j] + 4;
}
addMatrix (m3, m1, m2, x);
printf ("\n Printing m1\n\n");
for (i = 0; i < x; i++) {
for (j = 0; j < DIMXY; j++)
printf (" %4.1f", m1[i][j]);
putchar ('\n');
}
printf ("\n Printing m2\n\n");
for (i = 0; i < x; i++) {
for (j = 0; j < DIMXY; j++)
printf (" %4.1f", m2[i][j]);
putchar ('\n');
}
printf ("\n Printing m3 after addMatrix\n\n");
for (i = 0; i < x; i++) {
for (j = 0; j < DIMXY; j++)
printf (" %4.1f", m3[i][j]);
putchar ('\n');
}
return 0;
}
輸出
$ ./bin/arr_add_2d
Printing m1
1.0 2.0 3.0
2.0 3.0 4.0
3.0 4.0 5.0
Printing m2
5.0 6.0 7.0
6.0 7.0 8.0
7.0 8.0 9.0
Printing m3 after addMatrix
6.0 8.0 10.0
8.0 10.0 12.0
10.0 12.0 14.0
如果碰巧你的意圖是利用變長數組,那麼你的代碼看起來是這樣的:
void addMatrix (float m3[][3], float m1[][3], float m2[][3], int x, int y)
{
int i, j;
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
m3[i][j] = m1[i][j] + m2[i][j];
}
}
}
int main()
{
int i, j, x = 3, y = 3;
float m1[x][y]; /* cannot initialize variable size objects */
float m2[x][y];
float m3[x][y];
/* now fill m1 & m2 -- otherwise "what are you adding?" */
for (i = 0; i < x; i++)
for (j = 0; j < y; j++) {
m1[i][j] = i + j + 1;
m2[i][j] = m1[i][j] + 4;
}
addMatrix (m3, m1, m2, x, y);
二維數組不是指針指針。 – EOF
請參閱[數組](http://www.cplusplus.com/doc/tutorial/arrays/),「數組作爲參數」一節。 –
你得到了什麼樣的編譯器警告和錯誤?在'main()'中,你不能以這種方式重新賦值'm3'。 –