【问题标题】:In Matrix-chain multiplication, access to 2D arrays(parameter) error在矩阵链乘法中,访问二维数组(参数)错误
【发布时间】:2018-04-11 20:45:56
【问题描述】:

我在访问二维数组时遇到了困难。我将int** s(s 是二维维度) 作为参数传递。我尝试使用表单下方的索引重用它的元素(s[sp][jc],我也尝试了*(*(s+sp)+jc)),这会出错(没有错误代码,只是关闭程序)。有什么问题?或者如果我可以'不使用二维数组作为参数,而不是我如何打印父序列和矩阵链乘法的矩阵 --> 像这样:((a(bc))((de)f))

void printParenthesis(int sp, int ep, int jc, int** s) {
   printf("Debug\n");

   if(sp==ep) {
      printf("( %d ", sp);
      return;
   }
   else {
      printParenthesis(sp, jc, s[sp][jc], s);
      printParenthesis(jc+1, ep, s[jc+1][ep], s);
      printf(") ");
   }
}
int main() {
    ...
    int s[matNum-1][matNum]
    ...
    printParenthesis(0, matNum, jc, (int**)s);

【问题讨论】:

  • int ** 不是int[][]

标签: c multidimensional-array parameter-passing matrix-multiplication chain


【解决方案1】:

C 实际上并没有按照您期望的方式处理二维数组。它以 C 方式执行。

我们先观察*(*(s+sp)+jc))(s+sq)int* 类型,不是 int**。也就是说,您立即知道导致崩溃的原因。该表达式两次取消引用int*,这对于正常工作是不现实的。

要更正您的代码,您必须将数组参数的定义更改为

void printParenthesis(int sp, int ep, int jc, int (*s)[SIZE_S])

这样您的二维数组具有固定大小的长度。

换句话说,您将SIZE_S 指针数组传递给int

【讨论】:

  • 感谢您的回答。但是如果情况是二维数组大小是可变的,还有其他方法吗?如果不是,在主函数中将该函数转换为迭代形式是否更好?
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 2016-06-20
  • 2013-11-30
  • 2021-08-14
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多