2014-11-02 93 views
-2

我被給予,需要我寫兩個C功能的賦值:未指定Ç傳遞2D陣列給函數

1 - Read a matrix from the user. 
2 - Write a matrix to the console. 

矩陣尺寸,所以我不能使用這樣的:

void matwrite(float m[3][3]) { ... } 

有沒有任何解決這種情況?

+0

你看過用C關於動態分配數組? – VAndrei 2014-11-02 19:55:33

+0

是的,忘了提及我不能使用任何動態分配。 – 2014-11-02 19:56:21

+0

'void matwrite(int rows,int cols,float m [rows] [cols]){...}' – BLUEPIXY 2014-11-02 19:59:13

回答

-1

函數簽名應該是這樣的:

void matwrite(float** m, int w, int h); 

然後你可以遍歷元素,像這樣:

for (int i = 0; i < w; ++i) { 
    for (int j = 0; j < h; ++j) { 
    cout << m[i][j] << " "; // For example 
    } 
    cout << "\n"; 
} 

你會打電話與陣列和它的尺寸,例如功能:

float arr[][3] = { 
    {1, 2, 3}, 
    {4, 5, 6}, 
    {7, 8, 9}, 
    {1, 2, 3} 
}; 

matwrite(arr, 4, 3); 
+0

你能解釋一下如何調用這個函數嗎? float a [3] [3]; matwrite(一);將無法工作。 – 2014-11-02 19:58:31

-1

您可以在C.中使用可變長度陣列。

的功能可能看起來像

void ReadMatrix(size_t n, float m[][n]); 
void WriteMatrix(size_t n, float m[][n]); 

例如

float m[3][3]; 

ReadMatrix(3, m); 
WriteMatrix(3, m); 

如果可以有一個矩陣是不是方陣,那麼你需要一個參數添加到該功能。例如

void ReadMatrix(size_t m, size_t n, float m[][n]); 
void WriteMatrix(size_t m, size_t n, float m[][n]); 

這裏是一個示範項目

#include <stdio.h> 

void ReadMatrix(size_t n, float m[][n]) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     for (size_t j = 0; j < n; j++) 
     { 
      scanf("%f", &m[i][j]); 
     } 
    } 
} 

void WriteMatrix(size_t n, float m[][n]) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     for (size_t j = 0; j < n; j++) 
     { 
      printf("%f ", m[i][j]); 
     } 
     puts(""); 
    } 
} 

int main(void) 
{ 
    float m[3][3]; 

    ReadMatrix(3, m); 
    WriteMatrix(3, m); 

    return 0; 
}