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