Linux下的C语言——第七节二维数组

1.定义,初始化

【存储类型】数据类型 arr[行标][列标];列标是必须写的

2.元素引用

数组名[行][列]

3.存储形式

顺序存储,一行一行的连续存储。

Int a[5][5]={{1,2},{3,4,5},{6},{7}};

Int b[5][5]={1,2,3,4,5,6,7};

a,b是不同的两个数组,b的1,2,3,4,5在第一行内6,7在第二行。

4.深入理解:

int a[][];其中a是指向的第1行的起始位置。

a+1是指向第二行的起始位置。

“&二维数组名”就指向了整个二维数组。

&a+1是跳出了整个二维数组的下一个地址

二维数组补充:

 深入理解一维数组,二维数组的& ,*的含义


int main()

{

    int a[3]={1,2,3};

    int b[2][3]={1,2,3,4,5,6};



    printf("%p, %p, %d\n",a,&a,*a);



    printf("%p, %p, %d\n",a+1,&a+1,*a+1);



    printf("%p, %p, %p, %d\n",b,*b,&b,**b);



    printf("%p, %p, %p, %d, %d\n",b+1,*b+1,&b+1,**b+1,**(b+1));



    printf("%p, %p, %p, %p\n",*b+1,*(b+1),&b,&b+1);

    exit(0);

}

执行:

0x7ffcb8006f80, 0x7ffcb8006f80, 1

0x7ffcb8006f84, 0x7ffcb8006f8c, 2

0x7ffcb8006f60, 0x7ffcb8006f60, 0x7ffcb8006f60, 1

0x7ffcb8006f6c, 0x7ffcb8006f64, 0x7ffcb8006f78, 2, 4

0x7ffcb8006f64, 0x7ffcb8006f6c, 0x7ffcb8006f60, 0x7ffcb8006f78

二维数组例题:

1.行列互换

#define M 2

#define N 3



static void change()

{

    int arr[M][N]={1,2,3,4,5,6},b[N][M];

    int i,j;

    for(i=0;i<M;i++ )

    {

        for(j=0;j<N;j++)

        {

            printf("%d ",arr[i][j]);

            b[j][i] = arr [i][j];

        }

    printf("\n");

    }

    for(i=0;i<N;i++)

    {

        for(j=0;j<M;j++)

        {

            printf("%d ",b[i][j]);

        }

    printf("\n");

    }

执行:

[tom@CentOS7 arr]$ ./arrb

1 2 3

4 5 6

1 4

2 5

3 6

2.求最大值及其所在位置,求各行与各列和

static void max_add()

{

    int a[M][N]={5,6,2,7,9,3};

    int d[N][M]={5,6,2,7,9,3};

    int max = a[0][0] ,i,j,row,column;

    int add[M+1][N+1]={0};

    for(i=0;i<M;i++ )

    {

        for(j=0;j<N;j++)

        {

            printf("%d ",a[i][j]);

            if(max<a[i][j])

            {

                max = a[i][j];

                row=i;

                column=j;

            }

            add[i][j]=a[i][j];

            add[M][N]+=a[i][j];

            add[i][N]+=a[i][j];

            add[M][j]+=a[i][j];

        }

    printf("\n");

    }

printf("max=%d,i=%d,j=%d\n",max,i,j);

    for(i=0;i<M+1;i++)

    {

        for(j=0;j<N+1;j++)

        {

            printf("%d ",add[i][j]);

        }

    printf("\n");

    }

}

[tom@CentOS7 arr]$ ./arrb

5 6 2

7 9 3

max=9,i=2,j=3

5    6   2   13

7    9   3   19

12 15  5   32

矩阵乘积: 

static void max_add()

{

    int a[M][N]={5,6,2,7,9,3};

    int d[N][M]={5,6,2,7,9,3};

    int max = a[0][0] ,i,j,row,column;

    int add[M+1][N+1]={0};

    for(i=0;i<M;i++ )

    {

        for(j=0;j<N;j++)

        {

            printf("%d ",a[i][j]);

            if(max<a[i][j])

            {

                max = a[i][j];

                row=i;

                column=j;

            }

            add[i][j]=a[i][j];

            add[M][N]+=a[i][j];

            add[i][N]+=a[i][j];

            add[M][j]+=a[i][j];

        }

    printf("\n");

    }

printf("max=%d,i=%d,j=%d\n",max,i,j);

    for(i=0;i<M+1;i++)

    {

        for(j=0;j<N+1;j++)

        {

            printf("%d ",add[i][j]);

        }

    printf("\n");

    }

}

om@CentOS7 arr]$ ./arrb

1 5

4 11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值