c语言定义二维数组
在本节中,了解二维数组。二维数组类似于一维数组,但用法比一维数组稍微复杂一点。在后期的编程中,很少使用二维数组,因为二维数组的本质是一维数组,只是形式上是二维的。二维数组能解决的问题,一维数组也能解决。但在某些情况下,比如矩阵,用二维数组对程序员来说更直观,但对计算机来说和一维数组一样。
c语言定义二维数组 1
二维数组定义的一般形式为:
类型说明符 数组名[ 常量表达式][ 常量表达式];
比如:
int a[3][4];
表示定义了一个 3×4,即 3 行 4 列总共有 12 个元素的数组 a。这 12 个元素的名字依次是:a[0][0]、a[0][1]、a[0][2]、a[0][3];a[1][0]、a[1][1]、a[1][2]、a[1][3];a[2][0]、a[2][1]、a[2][2]
、a[2][3]。
与一维数组一样,行序号和列序号的下标都是从 0 开始的。元素 a[i][j] 表示第 i+1 行、第 j+1 列的元素。数组 int a[m][n] 最大范围处的元素是 a[m–1][n–1]。所以在引用数组元素时应该注意,下标值应在定义的数组大小的范围内。
此外,与一维数组一样,定义数组时用到的“数组名[常量表达式][常量表达式]”和引用数组元素时用到的“数组名[下标][下标]”是有区别的。前者是定义一个数组,以及该数组的维数和各维的大小。而后者仅仅是元素的下标,像坐标一样,对应一个具体的元素。
C 语言对二维数组采用这样的定义方式,使得二维数组可被看作一种特殊的一维数组,即它的元素为一维数组。比如“int a[3][4];”可以看作有三个元素,每个元素都为一个长度为 4 的一维数组。而且 a[0]、a[2]、a[3] 分别是这三个一维数组的数组名。下面来验证一下看看是不是这么回事儿:
# include <stdio.h>
int main(void)
{
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
printf("%d\n", sizeof(a[0]));
return 0;
}
输出结果是: 16
可见 a[0] 确实是第一行一维数组的数组名,其他同理。
在 C 语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素,这样依次存放。
c语言定义二维数组 2
可以用以下方式初始化二维数组。
c语言二维数组表示方法1) 分行给二维数组赋初值,比如上面程序的赋值方法:
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
这种赋初值的方法比较直观,将第一个花括号内的数据赋给第一行的元素、第二个花括号内的数据赋给第二行的元素……即每行看作一个元素,按行赋初值。
2)也可以把所有数据写在花括号里,按照数组排列的顺序给每个元素赋初始值。例如:
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
效果和第一个一样。但第一种方法更好,一行一行,界限分明。第二种方法,如果数据多,就写一大块,容易遗漏,也很难检查。
3)也可以只给一些元素分配初始值。例如:
int a[3][4] = {{1, 2}, {5}, {9}};
它的功能是给第一行的前两个元素赋值,给第二行和第三行的第一个元素赋值。其余元素
自动为0。初始化后,数组的元素如下:4)如果在定义数组时,即完全初始化时,所有元素都给了初始值,则可以不指定第一维的长度,但不能保存第二维的长度。例如:
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
等价于:
int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
系统将根据总数据和第二维的长度计算第一维的长度。但是,这种省略很少使用,因为它的可读性很差。
5) int a[3][4]={0};
二维数组“清零”,里面每一个元素都是零。
c语言定义二维数组 3
二维数组有行和列,那么如何输出里面的元素呢?在讲述一维数组的时候说过,“数组的元
素只能一个一个输出”,二维数组也不例外。在一维数组中是用一个 for 循环进行输出,而二维数组元素的输出要使用两个 for 循环嵌套。
# include <stdio.h>
int main(void)
{
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int i; //行循环变量
int j; //列循环变量
for (i=0; i<3; ++i)
{
for (j=0; j<4; ++j)
{
printf("%-2d\x20", a[i][j]);
}
printf("\n");
}
return 0;
}
输出结果是: 1 2 3 4 5 6 7 8 9 10 11 12
提示:“printf("%-2d\x20",a[i][j]);”中的“%-2d”,其中“-”表示左对齐,如果不写“-”则默认表示右对齐;“2”表示这个元素输出时占两个空格的空间,所以连同后面的 \x20 则每个元素输出时都占三个空格的空间。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论