解题思路:

由于本题明确了是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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

naive 1年前 回复TA