C语言的二维数组

原创 2018年04月17日 13:18:25

一、一维数组

一维数组数组名在下面两种情况表示整个数组:

1.在定义数组的同一个函数中,求sizeof

2.在定义数组的同一个函数中,&arr+1

其他情况下表示数组首地址

二、二维数组

那既然一维数组数组名在一般情况下表示数组首地址,那二位数组数组名是不是也代表数组首地址?

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”

由下面的源代码可以看出

#include <stdio.h>
 
int main() 
{
    int array[3][5] = {0};//定义一个二维数组(3行5列)
    int temp = 0;//设定一个临时的整型变量,用来给数组赋值
    for (int a = 0 ; a < 3; a++)//外层循环给数组的第一维赋值,就是array[x][y]的x
    {
        for (int b = 0 ; b < 5; b++)//内层循环给数组的第二维赋值,就是array[x][y]的y
        {
            temp = temp + 1;//为了让数组的数值不同,让临时变量有自增
            array[a][b] = temp;//二维数组的真正数据
            printf("array[%d][%d] = %-4d",a,b,array[a][b]);//打印出数组
        }
         printf("\n");//输出一行后换行
    }
    return 0;
}

输出为:


那二维数组可以和一维数组一样,像一维数组一样给函数传递数组名首地址吗?

答案是不能,因为一维数组只是数组,二维数组是数组的数组。

我们从下面可以看到

我们从左至右,从上至下讨论,

arr此时是一维数组数组名,即代表数组的首地址,也即是指针,变量类型int *

arr+1此时使用指针加法(可以看我指针的使用),变量类型int *

arr[0]此时为int型数据

brr此时是二维数组的数组名,即是数组的数组的首地址,也即是数组的指针,变量类型为int (*p)[4]

(brr是三个(长度为四的数组)的数组,所以类型为int (*p)[4],如果长度为五,则是int (*p)[5]

brr+1此时使用指针加法,变量类型int (*p)[4]

brr[0]此时可理解为一位数组的数组名,变量类型为int *

brr[0]+1此时使用指针加法,变量类型为int *

brr[0][0]此时为int型数据

三、注意区分数组指针与指针数组

数组的指针:指向数组(不是数组首地址)的指针

int (*p)[4]

指针的数组:存放指针的数组

int *p[4]

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
  • 1226

C语言二维数组的本质

#define _CRT_SECURE_NO_WARNINGS #include #include #include void main(){ int a[3][5], i=0,j=0;...
  • LHN_hpu
  • LHN_hpu
  • 2016-06-24 16:24:45
  • 722

C语言 二维数组

# 二维数组基本概念 ##1.二维数组的基本概念 - 所谓多维数组就是一个一维数组的每个元素又被声明为一 维数组,从而构成二维数组. 可以说二维数组是特殊的一维数组。 - 示例     +int a[...
  • u012938194
  • u012938194
  • 2016-01-15 22:21:24
  • 909

c语言中函数二维数组传递方法小结

c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一, 形参给出第二维的长度。例如:#include void func(int n, char  str[ ][5] ){ int ...
  • sarsjapanese
  • sarsjapanese
  • 2007-01-09 22:49:00
  • 15993

c语言中二维数组的传递

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

C语言_二维数组

ddddd
  • Damoncw
  • Damoncw
  • 2014-10-21 08:26:00
  • 5857

C语言动态生成二维数组(最简单实用版)

int **a; int m,n,i; scanf("%d%d",&m,&n); a=(int**)malloc(m*sizeof(int*)); /*malloc函数在stdlib.h里面,...
  • chen_gao_yuan
  • chen_gao_yuan
  • 2013-10-26 16:32:47
  • 1760

C语言为二维数组动态分配内存的问题

C语言中动态分配一位数组是很简单的,但是没有可以直接对二维数组进行动态分配的函数,因此,要相对二维数组动态分配内存,便要借助于一位数组来实现,具体如下:   假设要为一个n*m的二维数组分配动态内存 ...
  • mmc_maodun
  • mmc_maodun
  • 2013-09-07 22:57:22
  • 10184

C语言一维数组和二维数组的使用

C语言一维数组和二维数组的使用。
  • u014401742
  • u014401742
  • 2015-01-18 22:25:21
  • 1572

c语言二维数组的定义和初始化

二维数组: 用于存放一位数组的数组,被称为二维数组。 #include //二维数组的长度 #define kI 3 #define kJ 4 /** 打印二维数组元素 */...
  • CHANGXIAOTING
  • CHANGXIAOTING
  • 2015-09-03 00:44:57
  • 7762
收藏助手
不良信息举报
您举报文章:C语言的二维数组
举报原因:
原因补充:

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