簡體   English   中英

C:將2D數組傳遞給函數

[英]C: passing a 2D array to a function

首先:是的,我知道這是一個常見的話題,我已經嘗試了幾種建議的解決方案。 對我沒有任何幫助(至少對於“ nice”代碼沒有幫助),我終於嘗試了這里描述的方法(jxh解決方案中的第二個變體): 2D數組傳遞給函數

#include<stdio.h>
typedef double real32;

void Multiply_Matrix_Vector38(int n, int m, real32 A[n][m], real32 B[m], real32 Result[n]);

int main()
{
  real32 A[3][8];
  real32 B[8];
  real32 Result[3][3];
  int i;

  for(i = 0; i < 8; i++) {
    A[0][i] = i;
    A[1][i] = i+1;
    A[2][i] = i+2;
    B[i] = i;
    B[i] = i;
    B[i] = i;
  }

  Multiply_Matrix_Vector(3, 8, A[3][8], B[8], Result[3]);
  return 0;
}

void Multiply_Matrix_Vector(int n, int m, real32 A[n][m], real32 B[m], real32 Result[n])
{
  uint8 i, j;
  real32 sum;

  sum = 0;
  for(i = 0; i < n; i++  {
    for(j = 0; j < m; j++) {
      sum = sum + A[i][j] * B[j];
      printf("A %f\n", A[i][j]);
    }
    Result[i] = sum;
    sum = 0;
  }
}

我仍然會遇到不兼容的類型錯誤-如何解決?

隨着數組在傳遞給函數時衰減到指針,真正傳遞的是real32 (*)[8]real32 *

您可以適當地修改函數:

void Multiply_Matrix_Vector38(int n, int m, real32 (*A)[m], real32 *B, real32 *Result);

您還會使用錯誤的參數調用該函數。 您在數組中使用單個值而不是數組本身來調用它。 並記住數組索引從零到大小減一,您也超出了范圍。

而是只做

Multiply_Matrix_Vector(3, 8, A, B, Result);

哦,您是否真的希望Result也成為數組的數組?

當您執行Multiply_Matrix_Vector(3, 8, A[3][8], B[8], Result[3]);時,您沒有傳遞數組Multiply_Matrix_Vector(3, 8, A[3][8], B[8], Result[3]);

相反,您正在(3,8)傳遞A的元素,B的第9個元素。

您的調用應為: Multiply_Matrix_Vector(3, 8, A, B, Result[0]);

該錯誤應該可以幫助您:您正在傳遞雙打而不是雙打數組。

結果是大小為3的3個數組的n個數組,因此Result[0]Result[1]Result[2]具有正確的類型。 Result[3]超出范圍。

最后,您的函數原型應該為void Multiply_Matrix_Vector(...)而不是void Multiply_Matrix_Vector38(...)

您錯過了幾件事,例如)

for(j = 0; j < m; j++)

你也應該打電話

Multiply_Matrix_Vector(3, 8, A, B, Result[3])

代替。

Multiply_Matrix_Vector(3, 8, A[3][8], B[8], Result[3])

因為您的參數A[3][8]B[8]是real32變量(您要訪問矩陣的元素和向量的元素),所以不必使用AB

最后,您必須聲明。

void Multiply_Matrix_Vector(int n, int m, real32 A[n][m], real32 B[m], real32 Result[n]);

在主要功能上方可以在那里使用它。

注意:結果應為數組,因為如果將A(3x8)與B(8x1)相乘,則結果應為尺寸為3x1的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM