您的位置:首页 > 编程语言 > C语言/C++

12.从零开始学习C语言--数组

2013-06-21 21:49 127 查看
数组

1.数组的作用

a) 为了解决大量同类型数据的存储和使用,如要统计全校同学的成绩

b) 为了模拟现实问题(有点类似汇编的寻址...),如一个班级根据多少排多少列找到某一同学:a[i][j]

2.数组的缺陷

a) 长度固定,为便利

b) 编程语言对原始数组提供的操作支持太少,像排序、倒置、查找需要自己编写代码

一维数组

1.一维数组所具备的特征:

a) 数组中的变量是连续分配内存空间的

b) 所有变量数据类型相同

c) 所有变量所占的字节相同(内存空间大小相同)

2.定义一个含有5个整型元素的数组:

int a [5];

此数组中的5个元素分别是a[0]、a[1]、a[2]、a[3]、a[4],数组中的元素其实就相当于名为a[i]的变量,那么也可以通过scanf()来给元素赋值,scanf(“%d”, %a[i]);或者直接给元素赋值,a[i] = 100;

3.数组的初始化

a) 完全初始化:int a[5] = {1, 2, 3, 4, 5}

b) 不完全初始化:int a[5] = {1, 2, 3} 未初始化的元素自动置0

c) 不初始化:int a[5] 所有元素均为垃圾值

d) 清零:int a[5] = {0}

4.常见错误

a) int a[5];

a[5] = {1, 2, 3, 4, 5};

只有在定义数组时,才能给数组连续整体赋值,在数组定义时a[5]中的5代表的是数组长度,在其它地方代表都是下标即表示数组的第几个元素

b) int a[5] = {1, 2, 3, 4, 5};

a[5] = 100;

a数组最大元素为a[4],超出数组范围

c) int a[5] = {1, 2, 3, 4, 5}

int b[5];

b = a;

把数组a复制给b这么写是错误的,数组名代表的是数组第一个元素的地址

正确写法:

for (int i = 0; i<5; ++i)

{

b[i] = a[i];

}

二维数组

1.定义:int a[i][j]; 如 int a[3][4];

这里表示总共有12个元素,可以当成3行4列来看待

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]

a[i][j]表示第i+1行,j+1列的元素,因为是从a[0][0]开始计数的

int a[m]
; 最后一个元素是a[m-1][n-1],即右下面排列右下角位置

2.初始化

a) int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

b) int a[3][4] = {

{1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12},

}

3.二维数组的输出

# include <stdio.h>

int main(void)
{
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};

for (int i=0; i<3; ++i)
{
for (int j=0; j<4; ++j)
{
printf("a[%d][%d] = %-5d", i, j, a[i][j]);
//%-5d表示输出5个光标位,达到排列整齐的目的
}
printf("\n");
}

getchar();
return 0;
}


多维数组

实际上,所谓的多维数组并不存在,因为内在是一维线性结构,二维数组、三维数组这些都是逻辑上的说法;

多维数组实际上是一个个小一维数组嵌套形成的新的大一维数组

n维数组是每个元素是n-1维数组的一维数组

如二维数组a[4][3],可以理解成含3个元素的一维数组,每个元素又是一个含有4个元素的小一维数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: