写一函数,将一个3x3的整型矩阵转置

写一函数,将一个3x3的整型矩阵转置

解题思路: 矩阵转置就是行变列,列变行,说白了就是 arry[i][j] 转换为 arry[j][i] ; 但是需要注意的是,

一. 因为行列个数可能并非相同,转换后行数或者列数变多了或者变少,因此不能直接转换。需要重新申请空间存储转换后的数据。

二. 二维数组是线性扁平化存储的,无法确定列数的情况下传参后,在函数中使用时需要头指针向后偏移 列数*第n行 才能访问到第n行的数据。例如在函数中访问 arry[i][j] ,需要通过arry + col_num*i + j 方式进行访问。

答案:

#include <stdio.h>
int **transform(int **arry, int row_count, int col_count)
{
	//列变行,行变列,则行的个数是以前列的个数,列的个数是以前行的个数
	int **p = NULL;
    //矩阵中有多少行,取决于以前有多少列,然后申请地址空间
	p = (int **)malloc(sizeof(int *) * col_count);
	for (int i = 0; i < col_count; i++) {
        //一行中有多少列,取决于以前有多少行,然后申请空间
		p[i] = (int *)malloc(sizeof(int) * row_count); 
	}
	for (int i = 0; i < col_count; i++) {
		for (int j = 0; j < row_count; j++) {
            //二维数组的存储是扁平化的, 访问第j行第i列的数据,应该是 arry + j*列数 + i
            //j是新数组的列,但是是源数组的行
			p[i][j] = (arry + col_count * j)[i]; 
		}
	}
	return p;
}
int main()
{
	int arry[3][4];
	printf("Please enter a 3 x 4 matrix: \n");
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			scanf_s("%d", &arry[i][j]);
		} 
	}
	int **p = transform(arry, 3, 4);
	printf("\n");
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%d ", p[i][j]);
		}
		free(p[i]); // 释放二级指针中每个一级指针申请的空间
		printf("\n");
	}
	free(p);//释放总体二级指针的空间
	system("pause");
	return 0;
}

写一函数,将一个3*3的整型矩阵转置

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页

打赏作者

月已满西楼

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值