我被給予,需要我寫兩個C功能的賦值:未指定Ç傳遞2D陣列給函數
1 - Read a matrix from the user.
2 - Write a matrix to the console.
矩陣尺寸,所以我不能使用這樣的:
void matwrite(float m[3][3]) { ... }
有沒有任何解決這種情況?
我被給予,需要我寫兩個C功能的賦值:未指定Ç傳遞2D陣列給函數
1 - Read a matrix from the user.
2 - Write a matrix to the console.
矩陣尺寸,所以我不能使用這樣的:
void matwrite(float m[3][3]) { ... }
有沒有任何解決這種情況?
函數簽名應該是這樣的:
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);
你能解釋一下如何調用這個函數嗎? float a [3] [3]; matwrite(一);將無法工作。 – 2014-11-02 19:58:31
您可以在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;
}
你看過用C關於動態分配數組? – VAndrei 2014-11-02 19:55:33
是的,忘了提及我不能使用任何動態分配。 – 2014-11-02 19:56:21
'void matwrite(int rows,int cols,float m [rows] [cols]){...}' – BLUEPIXY 2014-11-02 19:59:13