嘿大家我通过做一些黑客等级挑战重新学习C ++并且遇到了段错误。程序应该采用矩阵的尺寸并计算两个对角线,然后将它们加在一起。我很确定错误在于如何将2D数组传递给computeMainDiagonal和computeSecondaryDiagonal函数。谢谢你的帮助!
int ComputeMatrixMainDiagonal(int matrixDimensions, int* matrix){
int rowIndent = 0;
int diagonalValue;
for(int i = 0;i < matrixDimensions;i++){
diagonalValue =+ (&matrix)[i][rowIndent];
rowIndent++;
}
return diagonalValue;
}
int ComputeMatrixSecondaryDiagonal(int matrixDimensions, int* matrix){
int rowIndent = matrixDimensions;
int diagonalValue;
for(int i = matrixDimensions;i > 0;i--){
diagonalValue =+ (&matrix)[i][rowIndent];
rowIndent--;
}
return diagonalValue;
}
int main() {
int matrixDimension;
int differenceAcrossSumsOfDiagonal;
int matrixMainDiagonal;
int matrixSecondaryDiagonal;
int * matrixPointer;
cin >> matrixDimension; //get matrix dimensions
int matrix[matrixDimension][matrixDimension]; //declare new matrix
for(int index = 0; index < matrixDimension;index++ ){ //populate matrix
for(int i = 0; i < matrixDimension;i++){
cin >> matrix[index][i];
}
}
matrixMainDiagonal = ComputeMatrixMainDiagonal(matrixDimension,&matrix[matrixDimension][matrixDimension]);
matrixSecondaryDiagonal = ComputeMatrixSecondaryDiagonal(matrixDimension,&matrix[matrixDimension][matrixDimension]);
differenceAcrossSumsOfDiagonal = (matrixMainDiagonal + matrixSecondaryDiagonal);
cout << differenceAcrossSumsOfDiagonal;
return 0;
}
答案 0 :(得分:1)
您可能会发生细分错误,因为&matrix[matrixDimension][matrixDimension]
并不代表您认为的含义。你的问题标题表明你认为这是一种通过值传递数组的方法(虽然你为什么要这样做会逃避我),但是按值传递和传递引用是一个问题如何是声明,而不是它是如何被调用的。
表达式&matrix[matrixDimension][matrixDimension]
将是矩阵的matrixDimension
行的matrixDimension
元素的地址。这超出了矩阵的范围,因为数组的最大索引比数组维度小1。但是,即使你写了&matrix[matrixDimension - 1][matrixDimension - 1]
,也不会是你想要的。你想要数组的第一个元素的地址,&matrix[0][0]
或简单地matrix
,尽管由于具有不同的类型(对应于不同的感官),它们是不相等的。 matrix
的元素是什么。)