c - 在矩阵链乘法中,访问二维数组(参数)错误

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

我在访问二维数组时遇到困难。我传递 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);

最佳答案

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

关于c - 在矩阵链乘法中,访问二维数组(参数)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022578/

相关文章:

c - 在 c 结构的最后一个成员处填充

javascript - 无法将参数传递给函数 onmouseover - javascript

r - 使用 sapply 时如何使用函数的参数?

c - C中二维数组的内存映射

java - 如何将 TestNG 参数传递给 Cucumber?

c - 自增int和静态int的意义: C

c - 将数组类型转换为 C 中的结构

c - 动态分支预测未命中计数 - 不正确

php - 将多维数组简化为线性数组

c++ - C 与 C++ 中的数组衰减规则?