鱼C论坛

 找回密码
 立即注册
查看: 1955|回复: 2

函数 二维数组 指针

[复制链接]
发表于 2022-12-19 16:00:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、将一个3X3的矩阵转置,用一个自定义函数实现矩阵的转置过程。

  在主函数中用scanf函数输入以下矩阵元素:

    1    3     5

    7    9    11

    13  15    17

将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。



预取输出的结果:

1     7  13

3     9  15

5    11  17


楼主刚学C不久,对这种地址有关的问题困惑比较大,麻烦注释一下一些赋址或传递地址的关键语句让我看看到底是怎么理解的,谢谢啦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-19 17:23:32 | 显示全部楼层
本帖最后由 jhq999 于 2022-12-19 18:30 编辑

  1. int zz(int *a,int N)
  2. {
  3.         int (*b)[N]=(int(*)[N])a;
  4.     for(int i=0;i<N-1;i+=1)
  5.     {
  6.         for(int j=i+1;j<N;j+=1)
  7.         {
  8.             int tmp=b[i][j];//让矩阵的位置对角线(i,j)(j,i)调换
  9.             b[i][j]=b[j][i];
  10.             b[j][i]=tmp;
  11.         }
  12.     }
  13.         return 0;
  14. }
  15. int main()
  16. {
  17.     int i,j,N;
  18.     scanf("%d",&N);
  19.     int a[N][N];
  20.     for(i=0;i<N;i+=1)
  21.     {
  22.         for(j=0;j<N;j+=1)
  23.         {
  24.             scanf("%d",&a[i][j]);
  25.         }
  26.     }
  27.     zz(a,N);
  28.     for(i=0;i<N;i+=1)
  29.     {
  30.         for(j=0;j<N;j+=1)
  31.         {
  32.             printf("%4d",a[i][j]);
  33.         }
  34.         printf("\n");
  35.     }

  36.     return 0;
  37. }

复制代码


无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-19 18:22:56 | 显示全部楼层
  1. #include <stdio.h>

  2. void foo(int arr[][3]) {
  3.         for (int r = 0; r < 3; ++r) {
  4.                 for (int c = 0, temp; c < r; ++c) {
  5.                         temp = arr[r][c];
  6.                         arr[r][c] = arr[c][r];
  7.                         arr[c][r] = temp;
  8.                 }
  9.         }
  10. }

  11. int main(void) {
  12.         int arr[3][3] = {
  13.                 {1, 2, 3},
  14.                 {4, 5, 6},
  15.                 {7, 8, 9}
  16.         };
  17.         foo(arr);
  18.         for (int i = 0; i < 3; ++i) {
  19.                 for (int j = 0; j < 3; ++j) {
  20.                         printf("%d ", arr[i][j]);
  21.                 }
  22.                 printf("\n");
  23.         }
  24.         return 0;
  25. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 22:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表