• 9、C语言中二维数组及数组名及指向二维数组的指针变量


    #include <stdio.h>
    #include <stdlib.h>
    //与二维数组相关的指针变量([] 比 *优先级高)
    //在一般指针变量指向二维数组,或者n维数组,要直接操作a[i][j],对指针的操作必须有两个符号(其中不出现&,如果有&则相应的加上* 的个数):
    //1、两个*
    //2、两个[]
    //3、一个* 一个[]
    //4、有一个*或[ ]代表数组中某个元素的首地址
    //同理n维,或者就是数组中某些地址而不是数组中元素的值
    int main()
    {
        int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//3行4列,也可以理解成3个长度为4的一维数组组成
        int *p1=arr;//arr代表指向首行的首地址.
        int *p2=*arr;//元素arr[0][0]的首地址. p2=arr[0];p2=*(arr+0); 相当于 &arr[0][0]
        printf("数组所占字节数:sizeof(arr)=%d\n",sizeof(arr));//数组所占字节数
        int i=0,j=0;
        printf("&arr=%d,arr=%d\n",arr,&arr);//内存地址代表一样。
        printf("================\n");
        printf("直接利用数组名来操作:\n");
        for(i=0;i<3;i++)
        {
            //记住:[]的优先级大于*
            //所有出现*(arr+i)<<==>>arr[i]<<==>>*(arr+i)+0
            //所有出现*(arr+i)+j<<==>>arr[i][j]<<==>>
            printf("第%d行的首地址(相当于&arr[%d]):arr+%d=%d\n",i,i,i,arr+i);//相当于 &arr[i] //第i行了首地址
            printf("元素arr[%d][0]的首地址(相当于&arr[%d][0]):*(arr+%d)=%d\n",i,i,i,*(arr+i));//相当于 &arr[i][0] 元素arr[i][0]的首地址
            for(j=0;j<4;j++)
            {
                printf("元素arr[%d][%d]的首地址(相当于&arr[%d][%d]):*(arr+%d)+%d=%d\n",i,j,i,j,i,j,*(arr+i)+j);
                printf("元素arr[%d][%d]的值:arr[%d][%d]=%d\n",i,j,i,j,*(*(arr+i)+j));
            }
            printf("================\n");
        }
        //指针p1完全可以和上面一样的完全操作,但p2有自己的方式,可以自增,减
        //记住:[]的优先级大于*
        //所有出现*(p+i)<<==>>p[i]<<==>>*(p+i)+0
        //所有出现*(p+i)+j<<==>>p[i][j]<<==>>
        printf("直接利用指针变量名来操作():\n");
        for(i=0,j=1,p2=arr[0];p2<arr[0]+sizeof(arr)/sizeof(int);p2++)
        {
            printf("元素arr[%d][%d]的首地址:&arr[%d][%d]=%d\n",i,j-1,i,j-1,p2);
            printf("元素arr[%d][%d]的值:arr[%d][%d]=%d\n",i,j-1,i,j-1,*p2);
            if(j%4==0)
            {
                i++;
                j=1;
                printf("================\n");
            }
            else
            {
                j++;
            }
        }
        return 0;
    }
    


    程序输出结果:
    数组所占字节数:sizeof(arr)=48
    &arr=2686668,arr=2686668
    ================
    直接利用数组名来操作:
    0行的首地址(相当于&arr[0]):arr+0=2686668
    元素arr[0][0]的首地址(相当于&arr[0][0]):*(arr+0)=2686668
    元素arr[0][0]的首地址(相当于&arr[0][0]):*(arr+0)+0=2686668
    元素arr[0][0]的值:arr[0][0]=1
    元素arr[0][1]的首地址(相当于&arr[0][1]):*(arr+0)+1=2686672
    元素arr[0][1]的值:arr[0][1]=2
    元素arr[0][2]的首地址(相当于&arr[0][2]):*(arr+0)+2=2686676
    元素arr[0][2]的值:arr[0][2]=3
    元素arr[0][3]的首地址(相当于&arr[0][3]):*(arr+0)+3=2686680
    元素arr[0][3]的值:arr[0][3]=4
    ================
    1行的首地址(相当于&arr[1]):arr+1=2686684
    元素arr[1][0]的首地址(相当于&arr[1][0]):*(arr+1)=2686684
    元素arr[1][0]的首地址(相当于&arr[1][0]):*(arr+1)+0=2686684
    元素arr[1][0]的值:arr[1][0]=5
    元素arr[1][1]的首地址(相当于&arr[1][1]):*(arr+1)+1=2686688
    元素arr[1][1]的值:arr[1][1]=6
    元素arr[1][2]的首地址(相当于&arr[1][2]):*(arr+1)+2=2686692
    元素arr[1][2]的值:arr[1][2]=7
    元素arr[1][3]的首地址(相当于&arr[1][3]):*(arr+1)+3=2686696
    元素arr[1][3]的值:arr[1][3]=8
    ================
    2行的首地址(相当于&arr[2]):arr+2=2686700
    元素arr[2][0]的首地址(相当于&arr[2][0]):*(arr+2)=2686700
    元素arr[2][0]的首地址(相当于&arr[2][0]):*(arr+2)+0=2686700
    元素arr[2][0]的值:arr[2][0]=9
    元素arr[2][1]的首地址(相当于&arr[2][1]):*(arr+2)+1=2686704
    元素arr[2][1]的值:arr[2][1]=10
    元素arr[2][2]的首地址(相当于&arr[2][2]):*(arr+2)+2=2686708
    元素arr[2][2]的值:arr[2][2]=11
    元素arr[2][3]的首地址(相当于&arr[2][3]):*(arr+2)+3=2686712
    元素arr[2][3]的值:arr[2][3]=12
    ================
    直接利用指针变量名来操作():
    元素arr[0][0]的首地址:&arr[0][0]=2686668
    元素arr[0][0]的值:arr[0][0]=1
    元素arr[0][1]的首地址:&arr[0][1]=2686672
    元素arr[0][1]的值:arr[0][1]=2
    元素arr[0][2]的首地址:&arr[0][2]=2686676
    元素arr[0][2]的值:arr[0][2]=3
    元素arr[0][3]的首地址:&arr[0][3]=2686680
    元素arr[0][3]的值:arr[0][3]=4
    ================
    元素arr[1][0]的首地址:&arr[1][0]=2686684
    元素arr[1][0]的值:arr[1][0]=5
    元素arr[1][1]的首地址:&arr[1][1]=2686688
    元素arr[1][1]的值:arr[1][1]=6
    元素arr[1][2]的首地址:&arr[1][2]=2686692
    元素arr[1][2]的值:arr[1][2]=7
    元素arr[1][3]的首地址:&arr[1][3]=2686696
    元素arr[1][3]的值:arr[1][3]=8
    ================
    元素arr[2][0]的首地址:&arr[2][0]=2686700
    元素arr[2][0]的值:arr[2][0]=9
    元素arr[2][1]的首地址:&arr[2][1]=2686704
    元素arr[2][1]的值:arr[2][1]=10
    元素arr[2][2]的首地址:&arr[2][2]=2686708
    元素arr[2][2]的值:arr[2][2]=11
    元素arr[2][3]的首地址:&arr[2][3]=2686712
    元素arr[2][3]的值:arr[2][3]=12
    ================
    Process returned 0 (0x0)   execution time : 0.897 s
    Press any key to continue.
  • 相关阅读:
    A方法调用B方法,JVM是怎么一步一步调用的
    java ImmutableMap使用
    使用 Spring 配置动态数据源实现读写分离
    spring-boot的三种启动方式
    使用 Spring 配置动态数据源实现读写分离
    Java改变生成随机数的平均值(改变生成随机数的概率)
    微信抢红包算法实现(JAVA)
    Redis分布式锁的实现原理
    Redis和队列
    springboot自定义配置文件
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3122866.html
Copyright © 2020-2023  润新知