c语⾔⼆维数组调零,c语⾔-⼆维数组初始化
今天为啥想写这个呢?因为从⾃我的体会,就是有很多⼈学习了c语⾔很多年,如果有⼀天让他写⼀个⼆维数组的初始化,都会很迷茫,感觉这样也可以,那样也可以,⼼⾥⾯不是很确定。
其实c语⾔是⼀个⽐较靠近硬件设计的语⾔,也就是c语⾔很照顾每⼀个数据在内存怎么摆放的,如果你能理解c语⾔的⼆维数组在内存怎么摆放的,那么你也就不会在⼆维数组的初始化⽅⾯迷茫和混沌了。
⾸先讲⼀下⼆维对象,这个⼤家应该都能明⽩,就是⼆维⽅向的数据变换,对于⼀张图像来说,在数字化图像的概念中,在相机的图像传感器上规定了图像坐标系就是⼆维的,⼀般规定左上⾓为原点,横向为x坐标,纵向为y坐标。
⼆维对象⼀般⽤⼆维数组存储和表达。⼆维数组在概念上是⼆维的,即是说其下标在两个⽅向上变化,下标变量在数组中的位置也处于⼀个平⾯之中,⽽不是象⼀维数组只是⼀个向量。
但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按⼀维线性排列的。如何在⼀维存储器中存放⼆维数组,可有两种⽅式:⼀种是按⾏排列, 即放完⼀⾏之后顺次放⼊第⼆⾏。另⼀种是按列排列, 即放完⼀列之后再顺次放⼊第⼆列。
在C语⾔中,⼆维数组是按⾏排列的。即,先存放a[0]⾏,再存放a[1]⾏,最后存放a[2]⾏。每⾏中有四
个元素也是依次存放。由于数组a 说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。这个是基本常识,⼀般的c语⾔书中是不提这个的,还是多了解⼀下。另外硬件的内存,⼀般重置的时候为0,但是在动态过程中都会被污染,所以,最好初始化的时候给出初始值,或者编译器直接给出初始化值。
⼆维数组⼀般属于静态分配的内存,在内存空间上⼀般属于全家变量,⼀般给出内存空间,不会释放和收回。
了解这么多了,你就应该知道怎么初始化⼀个⼆维的数组了吧。
例如对数组a[5][3]:
按⾏分段赋值可写为:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
按⾏连续赋值可写为:
int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};c语言二维数组表示方法
这两种赋初值的结果是完全相同的。
可以只对部分元素赋初值,未赋初值的元素⾃动取0值。例如:
int a[3][3]={{1},{2},{3}};
是对每⼀⾏的第⼀列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:
1 0 0
2 0 0
3 0 0
int a [3][3]={{0,1},{0,0,2},{3}};
赋值后的元素值为:
0 1 0
0 0 2
3 0 0
如对全部元素赋初值,则第⼀维的长度可以不给出。例如:
int a[3][3]={1,2,3,4,5,6,7,8,9};
可以写为:
int a[][3]={1,2,3,4,5,6,7,8,9};
最后在讲⼀下⼆维数组和⼀维数组的关系:⼀维数组和⼆维数组都是数组,数组是⼀种构造类型的数据。⼆维数组可以看作是由⼀维数组的嵌套⽽构成的。设⼀维数组的每个元素都⼜是⼀个数组,就组成了⼆维数组。当然,前提是各元素类型必须相同。根据这样的分析,⼀个⼆维数组也可以分解为多个⼀维数组。C语⾔允许这种分解。
如⼆维数组a[3][4],可分解为三个⼀维数组,其数组名分别为:
a[0]
a[1]
a[2]
对这三个⼀维数组不需另作说明即可使⽤。这三个⼀维数组都有4个元素,例如:⼀维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。必须强调的是,a[0],a[1],a[2]不能当作下标变量使⽤,它们是数组名,不是⼀个单纯的下标变量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论