解题思路:
由于本题明确了是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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复