• 二维数组与二维指针总结


    #include <stdio.h>
    /*
    (一)输入参数为二维数组,函数形参为二维指针
        (1)
    二维数组不能直接作为输入参数传给形参为二维指针的函数,如果要作为参数传递,在传递前必须进行强制类型转换(如果不转换gcc会报warning,而g++由于进行强制类型检查,会报error)
        (2)
    作为形参的二维指针在函数内部不能够像二维数组那样采用下标的方式来来引用,必须手动计算内存寻址;
        (3)
    由于传递的是地址,值的改变会影响到实参的值。
    原因:
        (1)
    二维指针的内存分配不一定是连续的;而二维数组的内存分布是连续的,他们的类型也不一样;
        (2)
    根据运算符优先级, 二维指针 TYPE **p,表示p所指向的类型是TYPE类型的指针;
    */
    void testArray01(int **pArray,int N_row,int N_column)
    {
        int Index_row,Index_colomn;
       for(Index_row=0;Index_row<N_row;Index_row++){
            for(Index_colomn=0;Index_colomn<N_column;Index_colomn++){
                printf("%d  ",*((int *)pArray + Index_row * N_column+ Index_colomn));
            }
            printf(" ");
        }

    //modify pArray value
       for(Index_row=0;Index_row<N_row;Index_row++){
            for(Index_colomn=0;Index_colomn<N_column;Index_colomn++){
                *((int *)pArray + Index_row *N_column + Index_colomn)=(*((int *)pArray + Index_row * N_column +Index_colomn))*10;
            }
        }
    }


    /*
    (二)二维数组作为输入参数
            (1)
    函数形参的几种方式 : pArray[M][N],pArray[][N],(*pArray)[N]
            (2)
    第二维的大小不能省略
       
    原因:   
           
    编译器在寻址时是按pArray+ Index_row * N_column + Index_colomn来对p[Index_row][Index_colomn]进行寻址的,所以第二维参数必须给出;

           
    */

    void testArray02(int (*pArray)[2],int N_row,int N_column)
    {
        int Index_row,Index_colomn;
       for(Index_row=0;Index_row<N_row;Index_row++){
           for(Index_colomn=0;Index_colomn<N_column;Index_colomn++){
                printf("%d ",pArray[Index_row][Index_colomn]);
            }
            printf(" ");
        }  
    }
    /*
    (三)TYPE (*pArray)[N] TYPE*pArray[N]
        TYPE (*pArray)[N]
    TYPE *pArray[N]含义不同,根据运算符优先级,(pArray*[N]表示pArray所指向的类型是长度为NTYPE类型的数组,pArray为指针;*pArray[N]表示数组pArray的成员为TYPE类型的指针,pArray为数组。
    */
    void testArray03()
    {
        chararray[3][10]={"luowei","test1","test2"};
        char (*p1)[10]=array;
        char *p2[10];
     
        int Index_row;
       for(Index_row=0;Index_row<3;Index_row++){
           p2[Index_row]=array[Index_row];
            printf("p1[%d]=%s  p2[%d]=%s ",Index_row+1,p1[Index_row],Index_row+1,p2[Index_row]);
     
        }  
    }

    main()
    {
        intT_array[3][2]={1,2,3,4,5,6};

        printf("****************testtestArray01: ");
        int** p_temp=(int **)T_array;
        testArray01(p_temp,3,2);
        printf("****************testtestArray02: ");
        testArray02(T_array,3,2);
        printf("****************testtestArray03: ");
        testArray03() ;

    }

  • 相关阅读:
    测试工具Fiddler(一)—— 基础知识
    测试必备之Java知识(四)—— 线程相关
    【猫狗数据集】保存训练模型并加载进行继续训练
    【colab pytorch】保存模型
    【python-leetcode90-子集】子集Ⅱ
    【猫狗数据集】定义模型并进行训练模型
    【colab pytorch】数据处理
    hadoop之java.io.IOException: Got error, status message , ack with firstBadLink as 192.168.*.* 50010
    hadoop完全分布式之集群时间同步
    hadoop之完全分布式集群配置(centos7)
  • 原文地址:https://www.cnblogs.com/riasky/p/3430698.html
Copyright © 2020-2023  润新知