C语言轻松学习-9

第九章

任务一:二维数组的定义和使用

任务二:二维数组的对称交换

小结

习题

上一章我们学习了“一维数组”的定义和使用,今天我们来学习“二维数组”,

其实我们可以理解,“一维数组”中的抽象的“一维”化为具体就是我们数学中的“线”,那么抽象的“二维”化为具体就是“面”,抽象的“三维”化为具体就是“空间”,抽象的“四维”化为具体就是“时间+空间”,“n维”……(=-=)

在C语言中,二维数组是这样定义的,如下代码:

第一行,我们先定义一个二维数组,数组名为a,数组元素(成员)共有 3×3=9个(这里我们可以理解为 矩形的面积计算,长(无穷的点)x宽(无穷的点)=面积(无穷的点)我们不考虑“点”的无穷性,在这里根据我们的代码中写的,a[3][3]我们就认为,3(长)x3(宽)=总数(面积)),

后面这几行都是输出我们二维数组名为a中的所有元素(成员)

#include<stdio.h>
int main()
{
  int a[3][3]={1,2,3,4,5,6,7,8,9};
  printf("%d %d %d \n",a[0][0],a[0][1],a[0][2]);
  printf("%d %d %d \n",a[1][0],a[1][1],a[1][2]);
  printf("%d %d %d \n",a[2][0],a[2][1],a[2][2]);
  return 0;
}

代码调试截图:我们根据调试截图可以认为,a[x][y];中,x代表“行”,y代表“列”

通常我们往后使用的话应该多维数组会用的多一点,例如,我们去用python,编写机器人的肢体动作,例如编写机器人的抬手动作时,我们需要在a[大臂][小臂]这样的数组,抬手时数组中“大臂”的数值在不断的变化,“小臂”的数值不变,然后某个过程中数组“大臂”“小臂”都会发生变化,(这里的“大臂”“小臂”就是机器人摆动的幅度或角度大小),(当然这只是简述方便大家理解,具体很麻烦)

二维数组或者多维数组的内存分部图如下:

我们用代码将他们的地址分别输出出来,

代码如下:

#include<stdio.h>
int main()
{
  int a[3][3]={1,2,3,4,5,6,7,8,9};
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      printf("a[%d][%d]=%d &a[%d][%d]=%d\n",i,j,a[i][j],i,j,&a[i][j]);
  return 0;
}

调试代码截图如下:我们看到了每一个值以及它们的内存地址,从第一个开始,内存地址依次+4,这个“4”指的是int(整数类型)的内存所占的字节大小。

感觉有一个非常大的缺点,就是二维数组没有一维数组那么灵活,因为,用代码来解释

代码如下:

#include<stdio.h>
int main()
{
  int a[]={1,2,3,4,5,6,7,8,9};
  int a[][]={1,2,3,4,5,6,7,8,9};
  return 0;
}

代码调试截图如下:这里出错了,错误提示大概是这里必须要规定元素(成员)数量的多少

试一试二维数组支持不支持常量,

代码如下:定义两个常量 “z”,”s”它们的值都为“3”

#include<stdio.h>
# define z 3
# define s 3
int main()
{
  int a[z*s]={1,2,3,4,5,6,7,8,9};
  int a[z][s]={1,2,3,4,5,6,7,8,9};
  return 0;
}

代码调试截图如下:我们也发现了,常量也不行,而且下方错误提示,编译器它无法识别这种写法,然后下面又给出了一个提示,说我们可以改写二维数组变一维数组然后再进行定义,,

看来以后使用多维数组时,要多定义一些,为了我们以后更新程序留下空间,否则,你将会体验到bug接连不断的噩梦!

1 2 3
分享到:
赞(0)

请选择你看完该文章的感受:

9瞧一瞧 1扯淡 4学到了 2不懂 7正能量 1无聊

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)