林惜城


私信TA

用户名:reminder

访问量:31297

签 名:

等  级
排  名 91
经  验 9070
参赛次数 0
文章发表 95
年  龄 0
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

哈姆

TA的其他文章


解题思路:

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

  评论区

2023-12-08 09:36:31
  • «
  • 1
  • »