189 8069 5689

C语言之二维数组-创新互联

二维数组及其指针

1 ) 在了解二维数组之前,我们先来了解一维数组及其指针

创新互联公司是一家专注于网站设计制作、网站设计与策划设计,屏南网站建设哪家好?创新互联公司做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:屏南等地区。屏南做网站价格咨询:18982081108

我们知道,一维数组中:数组名代表-->数组首元素的首地址   (千万不要认为是数组的首地址(&a),绝对不是)

  1. 在内存中,该代码的表现形式如下图:

  2. #include  
    {  
          int a[4];  
          int *p  = a;  //表明该指针指向了数组的首元素地址,当然也可以写为 int *p = &a[0];  
          return 0;  
    }

-- 这时候,对指针取值(*p),就是对取出指向地址&a[0]中的值的就是a[0]的数据。

----------------------------------分割线------------------------------------

2 )下面我们进入二维数组的介绍,首先,请看一段代码:

  1. #include

  2. int main()

  3. {

  4.     int a[2][4] = {1,2,3,4,

  5.                    5,,4,5,6};

  6.    return 0;

  7. }该代码的表现形式如下图:

  右边的a[ 0 ] [ 0 ]  这些数据对应的是二维数组中(每个数组中的元素)。

了解了二维数组在内存中的表现形式:

--我们开始引入数组指针的概念:

    2.1)  顾名思义:数组指针就是指向数组的指针,根据复杂类型的确认 ,数组指针形式为  int(*p)[ 3 ]; 表明该指针指向了(有三个int型数据)的数组 ,那么该数组名 a 就是数组a[ 0 ]的首地址,即(&a[ 0 ],也可写为a)

---(这点和一维数组的数组名相同----->都是数组首元素的首地址)

(***注意:该 图形两块不同的区域代表两个不同的数组----后面跟着的是每一个数组里面包含的元素)

   2.2)  a[ 0 ]这个数组名 代表了a[ 0 ]这个数组里面 a[ 0 ][ 0 ]的值的地址, 即----> a[ 0 ] == &a[ 0 ][ 0 ]  -

对于a[ 0 ]---- 这里可理解(不可画等号)为a[ 0 ] 是一个指针 ( 因为数组名是该首元素a[ 0 ][ 0 ]的地址嘛,既然是地址,就必须用指针来接收 )。

    2.3)p = a ;就是指向了a[ 0 ]这个数组的首地址。 也可写成&a[ 0 ]; 名为二维数组的行指针

   那么如果对 p 进行 p +1 操作,就表示地址移动到下一行(移动了sizeof(int)*4 = 16个字节),就是下一个数组的地址 -- 如上图所示

   技巧 - -  / * 我们将二维数组依次看作一维数组逐步分析 * /

   2.4)所以 p = a  + i ;  等价于   p = &a[ 0 ] + i

这是行指针的概念,如果对 p 取 * 运算符,表示取出 p 指向的内容,而 p 指向的的内容就是a[ 0 ],    行指针用来确定对哪一个数组的值进行操作, 直观的就是,这这个二维数组中, 选 a[ 0 ], a[ 1 ]这两个之中的其中一个进行操作),

    2.5)  *p  = *( &a[  0 ] )= a[ 0 ]  , * (p + i) = a[ i ](c语言中,方括号[ ]运算符和*()运算符一致,可互换)

  a[ 0 ]  + i  ==  &a[ 0 ][ 0 ] + i     就是列指针的概念(对数组的每一个元素进行操作),对a[ 0 ]这个数组里面的元素地址 + i ,指到相应元素a[ 0 ][ i ]的地址  即 &a[ 0 ][ i ]我们已经知道a[ 0 ]就是 a[ 0 ][ 0 ]的值的地址,即&a[ 0 ][ 0 ]  所以如果对a[ 0 ]取 * 运算符,得到的就是a[ 0 ][ 0 ]的值。

    *( a[ 0 ]+ i ) = a[ 0 ][ i ]

--------------------------------------看了这些不知道对各位朋友有无帮助。

 下面我对二级指针做一个画图分析: 让我们更深一步的理解二维数组指针


         ---------------------------------------------------------------------------------------------------

在文中有什么不对或者需要改进的地方,请各位朋友对我给出宝贵的意见和建议

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:C语言之二维数组-创新互联
链接URL:http://cdxtjz.com/article/dhjshs.html