C语言提高-32讲: 二维数组

原创 2017年10月27日 20:16:44

知识点总结:

      

        一:二维数组及其定义

              初始化
             1)分行给二维数组赋初值
             2)将所有数据写在一个花括号内
             3)只对部分元素赋初值,其他元素值自动置零

             二维数组定义中缺省行数(列数不可省),例:
             int a[][4]={1,2,3,4,5,6,7,8};    //要求对全部元素赋初值
             int a[][4]={{0,0,3},{},{0,10}};  //要求分行赋初值


         二: 二维数组元素的引用

               输入输出二维数组元素(输入时将每行每列保存到内存空间)
               输出时按不同格式输出
              1)行序优先      //与输入相同
              2)列序优先      //将原来的列作为行输出【1)的转秩】

                   

                    矩阵的转秩(或用输出格式控制)

                   

              3)倒序输出
                   


         三:二维数组的存储

               二维数组的存储:按行连续存放(行序优先);二维数组可视为(元素是一个一堆数组的)一维数组

               行地址 a+i&a[i],区别于a[i]
               列地址 a[i]+j &a[i][j]
               一层一层剥开我的心
             

             

            

         四:使用指针操作二维数组

                 数组指针:*p / (*p)[j]指向一维数组的指针变量

                 区分p是指向元素的指针(列地址)or指向一维数组的指针(行地址),即指针的类型要匹配

                 指针数组*a[i]定义的是数组,数组元素是指针a[i]是指向第i行数组的指针(列地址)

                

                                

//指针数组(数组元素是指针)
#include <stdio.h>
int main(){
    int b[2][3]={{1,2,3},{2,4,6}};
    int *pb[2];
    int i,j;
    /*   pb是一个二级指针,pb[0]则是一级指针
         b[0]是列指针,是存放着1,2,3的一维数组   */
    pb[0]=b[0];      
    pb[1]=b[1];                                       
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%2d",*pb[i]);
            pb[i]++;
        }
        printf("\n");
    }
    return 0;
}             

                 若将程序做以下改动:

    #include <stdio.h>
    int main(){
        int b[2][3]={{1,2,3},{2,4,6}};
        //int *pb[2];
        int i,j;
        //pb[0]=b[0];      
        //pb[1]=b[1];
        for(i=0;i<2;i++){
            for(j=0;j<3;j++){
                printf("%2d",*b[i]);
                b[i]++;
            }
            printf("\n");
        }
        return 0;
    }
              

                分析:主函数中的变量b是定义的数组,虽然代表了数组首地址和第一个元素的地址,

                           但是是不能改变的,不能对其做赋值运算。这个时候就可以定义一个指针数组


         五:多维数组作函数参数

                 例  3个学生4门课,计算总平均分,并输出第n个学生成绩  

                 注意函数的声明、定义和调用

                 声明p是指向元素的指针调用列地址;声明p是指向一维数组的指针调用行地址        

//多维数组名作函数参数(数组指针的应用)
#include <stdio.h>
void average(int *p,int n);        //P是指向一维数组的指针(全部元素形成的一维数组)
void search(int (*p)[4],int n);    //P是指向一维数组的指针(每行元素形成的一维数组)
int main(){
    int score[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
    average(*score,12);            //列地址,指向每一个元素
    search(score,2);               //行地址,指向每一行数组
    return 0;
}
void average(int *p,int n){        //p是指向一个一维数组(一行12个元素)的指针
    int sum=0,aver,*p_end; 
    p_end=p+n-1;                   //提前定义最后一个元素的地址值
    for(;p<=p_end;p++)             //用一个一级指针去遍历一个二维数组,需要把一个二维数组看成一维的
        sum+=*p;
    aver=sum/n;
    printf("average=%4d\n",aver);
}
void search(int (*p)[4],int n){
    int i;
    printf("No.%d: ",n);
    for(i=0;i<4;i++)
        printf("%4d",*(*(p+n)+i)); //二维数组的逻辑结构并不是一维的,以一维的形式保存在内存
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_39286218/article/details/78368754

C语言数组知识点总结

数组:就是只能存放一种数据类型,比如int类型的数组、float类型的数组,里面存放的数据称为“元素” 数组的定义: 首先声明数组的类型,然后声明数组元素的个数(也就是需要多少存储空间) ...
  • wutengwei007
  • wutengwei007
  • 2015-03-12 18:36:10
  • 17440

c语言中二维数组的传递

转自: c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度。 例如: #include void func(int n, ch...
  • ahuang1900
  • ahuang1900
  • 2014-07-06 16:42:47
  • 1713

c语言二维数组初始化的方式

#include #include int main() { int **arr; int m=3,n=4,i,j; arr = (int **)malloc(sizeof...
  • qq_29630271
  • qq_29630271
  • 2017-05-17 23:02:28
  • 1297

【C语言基础】1-5 C语言循环与二维数组

C语言循环与二维数组知识点break与continuebreak:break语句在switch-case语句中是跳出。break语句在循环中还有另一种用法。当循环中遇到break语句时,立即结束循环,...
  • github_35746658
  • github_35746658
  • 2016-12-24 14:54:40
  • 107

C语言----数组(描述数组相关的知识、动态创建一个二维数组)

面试题:什么是数组? 解答此类问题要循序渐进,具有条理性。 ①概念:数组是相同类型的数据的集合; ②分类:一维数组、二维数组 ③特性:数组在底层是一段连续的空间,支持随机访问。 数组名在不同...
  • ZWE7616175
  • ZWE7616175
  • 2018-04-20 23:31:18
  • 5

C语言二维数组与数组指针和指针数组的应用

#include #include float stu_ave(int *p,int n) //接收列地址,和元素个数   { int i; float sum = 0; for(i = 0...
  • qq1294272813
  • qq1294272813
  • 2017-04-16 12:10:44
  • 1528

c语言数组详解

数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组...
  • ad_ad_ad
  • ad_ad_ad
  • 2007-04-24 16:37:00
  • 12570

二维数组的一些操作

二维数组的一些操作:二维数组的遍历、1、二维数组的遍历操作:外循环控制的是二维数组的行数(其实就是二维数组的长度),内循环控制的是二维数组的列数(其实就是一维数组的长度)。/* 需求:二维数组遍历 ...
  • cmm0401
  • cmm0401
  • 2018-04-09 09:48:47
  • 10

比较C语言与Java中的二维数组

比较C语言与Java中的二维数组                 虽然Java的很多基础知识与C语言中的都差不多,但是今天学了Java的二维数组之后才赫然发现原来C语言与Java中的二维数组是截然不...
  • gyy19
  • gyy19
  • 2017-09-26 12:56:13
  • 418
收藏助手
不良信息举报
您举报文章:C语言提高-32讲: 二维数组
举报原因:
原因补充:

(最多只允许输入30个字)