精华内容
下载资源
问答
  • 二维数组 形式为a[i][j],其中i表示行数,j表示列数,在内存中占用i * j个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0][0],a[1]为第1行的首地址,类似于&a[1][0]。 例如: char a[4]

    一维数组
    简称数组,形式为a[i],在内存中占用i个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0],数组名不是指针,但可以转化成指针使用。
    例如:
    char a[3];假设数组的首地址为0x0,
    则&a[2]则为0x2;

    二维数组
    形式为a[i][j],其中i表示行数,j表示列数,在内存中占用i * j个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0][0],a[1]为第1行的首地址,类似于&a[1][0]。
    例如:
    char a[4][3];假设数组空间的首地址为0,
    则,&a[2][2]则为 0x8(2 * 3 + 2)

    注意
    二维数组作为形参传递时,不同于一维数组,不能直接作为二维指针传递,形参格式如下,后面数组的列数应和二维数组数组一致,不能忽略,三维数组也是如此。

     #include <stdio.h> 
     
     void print_array(int *array, int len)
     {
         int i = 0;
         for ( ; i < len; i++) {
             printf("%d ",array[i]);
         }
         putchar('\n');
    }
     
    void func(int (*array)[10]) //void func(int array[][10])
    {
         print_array(array[0], 10);
         print_array(array[1], 10);
         print_array(array[2], 10);
         print_array(array[3], 10);
         print_array(array[4], 10);
    }
     
    int main()
    {
         int array[5][10] = {
             {0,1,2,3,4,5,6,7,8,9},
             {10,11,12,13,14,15,16,17,18,19},
             {20,21,22,23,24,25,26,27,28,29},
             {30,31,32,33,34,35,36,37,38,39},
             {40,41,42,43,44,45,46,47,48,49}
        };
         func(array);
         return 0;
    }
    

    三维数组
    形式为a[i][i][k],其中i表示层数,j表示行数,k表示列数, 在内存中占用i * j * k个大小相等的连续空间(可以理解为有一本书名为a,这本书有i页,每页有j行,每行有k个字)。其中数组名a为该空间的首地址,类似于&a[0][0][0],a[1]为第1层的首地址,类似于&a[1][0], a[1][1]为第一行的首地址,类似于&a[1][1][0]。
    例如:
    char a[5][4][3];假设数组空间的首地址为0,
    则 &a[4][3][2]则为 0x59(4 * 4 * 3 + 3 * 3 + 2)

    展开全文
  • C语言:二维数组的存储及地址表示

    万次阅读 多人点赞 2017-09-14 12:11:33
    任务代码: 知识总结: (1)二维数组的储存: (2)二维数组可以视为一维数组: (3)回顾:数组名代表数组首...(4)行地址 & 列地址 ...*(6)很绕但是很重要的对二维数组指针表示的理解:

    任务代码:


    知识总结:


    (1)二维数组的储存:



    (2)二维数组可以视为一维数组:



    (3)回顾:数组名代表数组首元素地址



    (4)行地址 & 列地址



    *(5)二维数与一维数组指针的不同:



    *(6)很绕但是很重要的对二维数组指针表示的理解:



    展开全文
  • 二维数组的首地址传给指针我们就应改变书写形式了: p=&a[0][0]; 或 p=a[0]; 而替代a[m][n]的形式也变成了 p[m]+n 与 a[m]+n 。 表示第m行第n个元素的地址。 注意:这种形式已经表示地址,无需用&来取...

    一维数组与指针

    将一维数组的首地址传给指针我们以这种形式书写:(p为指针)
    p=&a[0];

    p=a;

    并且还可以用 p+n 与 a+n 的形式来替代表示a[n]。

    二维数组与指针

    但二维数组就发生了变化
    将二维数组的首地址传给指针我们就应改变书写形式了:
    p=&a[0][0];

    p=a[0];

    而替代a[m][n]的形式也变成了 p[m]+n 与 a[m]+n 。
    表示第m行第n列个元素的地址。
    注意:这种形式已经表示地址,无需用&来取地址了。
    书写形式是有规律的,所以通过这种固有规律来将多维数组书写出来。

    展开全文
  • 二维数组可以表示二维表格上的数据 二维数组存储形式先行后 二维数组的处理一般采用双重循环语句 二维数组的存储 元素按先行后的顺序存放 例如:int a[3][4]; a —>数组名a代表整个二维数组的首地址地址...

    二维数组

    1. 二维数组可以表示二维表格上的数据
    2. 二维数组存储形式先行后列
    3. 二维数组的处理一般采用双重循环语句

    二维数组的存储

    元素按先行后列的顺序存放
    例如:int a[3][4];

    a —>数组名a代表整个二维数组的首地址的地址常量

    0 a[0][0]
    1 a[0][1]
    2 a[0][2]
    3 a[0][3]
    4 a[1][0]
    5 a[1][1]
    6 a[1][2]
    7 a[1][3]
    8 a[2][0]
    9 a[2][1]
    10 a[2][2]
    11 a[2][3]

    二维数组应用的三个基础框架

    1.用双重循环给二维数组赋值

    int a[3][4],i,j;
    for(i=0;i<3;i++)
     for(j=0;j<4;j++)
     a[i][j]=i+j;
    

    2.用双重循环找二维数组最大值

    max=a[0][0];
    for(i=0;i<3;i++)
     for(j=0;j<4;j++)
     if(max<a[i][j])
     max=a[i][j];

    3.用双重循环给二维数组输出

    for(i=0;i<3;i++)
     {for(j=0;j<4;j++)
      cout<<a[i][j]<<" ";
      cout<<endl;
      cout<<"该二维数组的最大值为 "<<max<<endl;
    
     

    二维数组案例:计算多个学生的成绩并排序输出

    【例】若有4个学生,请存储每个学生的语文,数学,英语三科成绩,并计算每个学生的总分并排序输出。
    问题分析

    语文 数学 英语 总分
    学生1 * * *
    学生2 * * *
    学生3 * * *
    学生4 * * *

    1.双重循环输入各个学生的各科成绩(如上所示的4*3表格);
    2.循环累加各行的总分;
    3.用一个一维数组给总分排序;
    4.循环输出数组的值;

    #include <iostream>
    using namespace std;
    int main()
    {
     const int N=4;
     const int M=3;
     double a[N][M+1],b[N],temp;//定义一个一维数组用来对总分排序 
     int i,j,max;
     cout<<"请输入四个学生的成绩"<<endl;
     for(i=0;i<N;i++)//输入4个学生的三科成绩 
     {
      cout<<"请输入第"<<i+1<<"个学生语文、数学和英语成绩(按次序输入):";
      for(j=0;j<M;j++)
      cin>>a[i][j];}
      //计算总分 
      for(i=0;i<N;i++)
      {
       a[i][M]=a[i][0];//每个学生总分赋初值为语文成绩 
       for(j=1;j<M;j++)//每个学生总分累加数学和英语成绩 
       a[i][M]+=a[i][j ];
      }
      for(i=0;i<N;i++)//将总分复制给一维数组,为排序做准备 
      b[i]=a[i][M];
      //总分排序 
      //(选择排序)
      for(i=0;i<N-1;i++) 
      {
       max=i;
       for(j=i+1;j<N;j++)
       if(b[j]>b[max])
        max=j;
        temp=b[i];
        b[i]=b[max];
        b[max]=temp;
      }
      /*(冒泡排序)
      for(j=1;j<N;j++)
      {
       for(i=0;i<N-j;i++)
       if(b[i+1]>b[i]){
        temp=b[i+1];
        b[i+1]=b[i];
        b[i]=temp;
       }
      }
      */
        //循环输出总分及学号 
       for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        if(b[i]==a[j][M]){//总分复制排序了但表格里面总分的位置并没有改变
         cout<<"第"<<i+1<<"名同学学号为:"<<j<<" 总分为:"<<a[j][M]<<endl; 
      }
      return 0;
    }

    之前没有看过选择排序,所以总分排序那一小部分代码看了挺久也没理解,在此补充一下选择排序的内容。

    补充:选择排序

    选择排序算法思想 :
    每趟从待排序的数据中选出最小(或最大)的元素,并记录其位置,然后和待排序的数据中第1个数进行交换,每次进行一个循环便找到一个最小(或最大)值,直至全部排序结束为止。

    流程
    比如在一个长度为 N 的无序数组中,在第一趟遍历 N 个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的 N-1 个数据,找出其中最小的数值与第二个元素交换…第 N-1 趟遍历剩下的 2 个数据,找出其中最小的数值与第 N-1 个元素交换,至此选择排序完成。(一共需要循环遍历N-1次)

    (1)从待排序序列中,找到关键字最小的元素;

    (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

    (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

    展开全文
  • 二维数组

    2017-08-13 12:04:18
    一、二维数组 1、行优先:把每一行看作一个一维数组,而不是每一 2、可以省略一维 3、[ ]:使用时表示下标,定义时表示长度 4、二维数组不是二级指针,一维数组是一级指针 5、数组名是数组首元素的地址,前提:必须...
  • 二维数组s[3][4]定义int s[3][4]={ {0,2,4,6},{1,3,5,7},{9,10,11,12} }根据以上的一个二维数组的例子,就有如下表示:注意:S代表着二维数组的首地址,s+1代表第一行的首地址,而s[1]代表着第一行第一地址,...
  • 二维数组a[i][j]在内存中是按照行来存放的,即a[0],a[1],a[2],......a[i]分别表示的是第0行,第1行,第2行.......第i行的行地址 转载于:https://www.cnblogs.com/wuyuewoniu/p/4047320.html...
  • 上述语句表示定义一个指针变量p,包含4个指向整形元素的一维数组,p表示该一维数组的首地址,可以将p看成是二维数组中的行指针,而p+i表示第i行的首地址,那么 *(pt+i) + j 就表示二维数组第i行第j的元素地址,*(*...
  • 二维数组int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };概念上,a是3行4的矩阵;...二维数组在内存中的存储a[0],a[1],a[2]分别表示3个一维数组,地址次第相差4*sizeof(int);二维数组...
  • 二维数组转换为一维:a[m][n] = a[m*k+n],k 表示行的长度 int 型二维数组,a[4][4]的地址为 0xf8b...我们可推得二维数组列的长度,以及然后是任意位置的地址。a[4][4] ==> (4x+4)*4 // x: 表示行的长度,乘子 4:表
  • 设有二维数组 a[3][4] 在该数组被引用是不会因为后期二维数组的行 、的改变而改变呢?   我们可以运用sizeof函数   sizeof(a)——>二维数组总的字节数(3*4*不同类型的字节数)   sizeof(a[0])——>二维...
  • 二维数组运算

    2017-09-05 22:42:00
    a[0][0]既可以表示数组0行0,同样也表示二维数组地址,&a[n][m]表示n行m元素地址; (3)&a[0]表示0行首地址,当然&a[n]表示第n行首地址; (4)a[0]+n表示第0行第n元素地址; (5)*(*(a+...
  • C语言二维数组

    2021-04-24 11:44:25
    二维数组初始化 int arr[3][4] = {1,2,3,4} int arr[3][4] = {{1,2},{3,4}} int arr[ ][4] = {{2,3}, {4,5}} 二维数组在内存中是连续存放的 1.每行元素内是连续的 2.各行之间也是连续存放的 数组名是什么 ·数组名...
  • 二维数组名与地址的对应

    千次阅读 2016-06-11 08:55:13
    注意这里a不是第一个元素的地址,而是第一个维数组(即a[0],a[0]是一个4元素的数组)的地址,a[0][0]才是表示的一维数组第一个元素的地址. 数组名 + 1表示向下移一层. 本题中,a是一个三行四的数组 *(a+1)表示行...
  • 二维数组的类型

    2019-09-09 17:12:45
    在一维数组中arr表示第一个数的地址,所以二维数组中brr表示第一行的地址,可以记作int (*p)[4],这是一个数组指针; brr+1就是指第二行的地址; brr[0]是表示第一行第一个格子的地址; brr[0]+1是表示第一行第二个...
  • 1、二维数组在内存中的存储 如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},...而二维数组的名字代表二维数组第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0元素的首地址,虽然是相等
  • 指针与二维数组

    2018-07-28 10:14:28
    指针与一维数组的关系: 1.一维数组(int型):int buf[5]={1,2,3,4,5}; 数组名就是首地址,数组是一块连续同类型的空间,因此定义一个指针...2.二维数组(int型):int buf[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12...
  • C语言指针引用二维数组

    千次阅读 2016-12-07 16:53:11
    最近看谭浩强的《C程序设计》,第248页 例8.11 ...2.二维数组地址: 2.1 0行首地址:a 2.2 1行0元素地址:a[1] 2.3 1行首地址 : a+1 二.用取地址符(当然只能表示数组的地址) 1.0行首地址:&a[0] 2.元素
  • 二维数组指针问题

    2019-10-04 14:25:03
    对于二维数组int a[][4]来说。。有以下要点: 1、 表示形式 含义 结果(举例)备注 a 二维数组名,指向一维数组a[0],即0行首地址2000行指针 a[0],*(a+0),*a0行0元素的地址...
  • 二维数组及指针

    2013-09-14 22:07:02
    二维数组和指针⑴ 用指针表示二维数组元素。 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后的顺序依次存储的,当把每一行看作一个...
  • a[0][0]既可以看作第0行0的首地址,同样也可以被看作是二维数组的首地址。&a[m][n]就是第m行n元素的地址 (3)&a[0]是第0行的首地址,当然&a[n]就是第n行的首地址 (4)a[0]+(n-1)表示第0行...
  • 二维数组和指针

    2012-05-28 17:46:24
    二维数组和指针⑴ 用指针表示二维数组元素。 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后的顺序依次存储的,当把每一行看作一个...
  • 二维数组与指针(详解)

    千次阅读 多人点赞 2019-04-02 00:00:29
    2.二维数组的行地址和各个元素地址表示 int a[3][4]; 对于数组a,我们可以将a[3][4]分为两部分理解a[3]和[4],对于a[3],我们可以看成是一个一维数组,其元素分别为a[0],a[1],a[2],他们分别表示各行所代表的起始...
  • 给定下列声明 : int array[4][2]; 请写出下面每个表达式的值,假定数组的起始位置为1000,整型值在内存中占据了2个字节的空间。...表示一个4行2数组。 1000 1002 1004 1006 10.
  • 二维数组的指针

    2019-09-30 22:56:35
    二维数组的数组名是指向单个数组的指针(行指针)。 二维数组(如:a[3][4])的指针分为两种: 1.行指针,如:a,是一个指向数组的指针; 2.指针,如:&a[0][0],a[0],*a,是一个指向单个变量的指针。 虽然a...
  • 关于二维数组与指针

    千次阅读 2018-12-11 12:51:38
    二维数组可以看作一维数组,每一行代表一个一维数组。比如:int a4,可以把a 看成是一个四行的数组。此时a代表第0行首地址,a+i即代表第i行首地址;也可以记作&amp;amp;amp;amp;amp;a[i]; 而a[i]有代表一维...
  • C语言中二维数组要用Int** 来表示,在分配空间后,...而m行n二维数组的寻址方式是首地址a+in+j,因此先对a+i找到相应的行,也就是一维数组,并且取得到一个int指针,再加上j,再取值即为二维数组中的一个元素 ...
  • 在内存中并不存在二维数组二维数组实际的硬件存储器是连续编址的,也就是说内存中只有一维数组。 定义一个数组a[2][3],那么a[0],a[1],分别表示数组第一行和第二行的首地址。 遍历二维数组a[L][C]的几种方法: ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

表示二维数组列地址