解题思路:
由于本题明确了是3*3数组,所以实际上把代码写成matrix[0] + matrix[4] + matrix[8]都能通过。关键在于,如果想写成一个子函数,该如何把二维数组作为参数传入。
首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组;
另外,数组中元素的个数也是数组类型的一部分。
当一个数组的元素仍然是数组时,通常使用2个维度来定义它,一个数组表示数组本身的大小,另一个维度表示其元素大小(它的元素也是数组):
int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组 int (*p)[4] = ia; //p指向含有4个整数的数组(指向第一个内层数组)
如果是传数组,就(int matrix[][3]);如果是传指针,就(int (*matrix)[3]),注意小括号不可丢掉。
注意事项:
好好想想int (*matrix)[3]和int *matrix[3]和int matrix[3]和int matrix[]和int *matrix的区别!搞清楚这个应该就搞清楚指针了。
第一个代表一个指针,它指向一个二维数组,这个二维数组中的元素都是大小为3的一维整型数组;
第二个代表一个一维数组,这个数组中有3个整型指针。
后面的自己想吧,等以后看这篇笔记的时候再补充。
参考代码:
#include using namespace std; const int MAX = 3; void printMatrixDiagonalSum(int (*matrix)[3], int len); //输出3*3矩阵主副对角线元素和 int main() { //初始化全0矩阵,写成m[][MAX]代表4列,行数未知,此时必须写出所有元素,否则不知道有几行 int m[MAX][MAX] = {0}; for(int i = 0; i < MAX; i++) { for(int j = 0; j < MAX; j++) { cin >> m[i][j]; //读输入 } } printMatrixDiagonalSum(m, MAX); return 0; } void printMatrixDiagonalSum(int (*matrix)[3], int len) { //传入数组指针,不可写成*matrix[3] int sum = 0; //主对角线元素和 int subSum = 0; //副对角线元素和 for(int i = 0; i < len; i++) { sum += matrix[i][i]; subSum += matrix[i][len - i - 1]; } cout << sum << " " << subSum << endl; }
0.0分
3 人评分