注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/105300636
1 数组简介
在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
为什么需要数组?
数组可以解决大量同类型数据的存储和使用。
2 一维数组
2.1 一维数组的定义
数组元素是组成数组的基本单元。一维数组的形式可以表示为:
int a[5]; //定义整型数组数组a包含5个元素
数组元素的条件:
- 为n个变量连续分配存储空间;
- 所有变量的数据类型必须相同;
- 所有变量所占的字节大小必须相等;
2.2 一维数组的使用
初始化方式有:
//方式1:
int a[5]={1,2,3,4,5};
//方式2:
int a[5]={1,2,3};//不完全初始化时,未初始化的元素自动为0
//方式3:
int a[5];//所有元素值均为随机值
//方式4:
int a[5]={}; //所有元素值清零
//方式5:
int a[]={1,2,3,4,5};
常见的错误初始化有:
int a[5];
a[5]={1,2,3,4,5};//错误 只有在定义数组的同时才能够整体赋值,其他情况均错误。
int a[5]={1,2,3,4,5};
a[5]=666;//错误 没有a[5]这个元素,最大为a[4]
int a[5]={1,2,3,4,5};
int b[5];
b=a;//错误 a表示数组a第一个元素的地址,应使用for循环将按数组的元素逐个赋值给数组b
2.3 举例
要求:键盘输入数组10个元素,然后依次打印出来。
代码示例
#pragma warning( disable : 4996)
#include<stdio.h>
#include<iostream>
int main()
{
int a[10];
printf("请输入10个整数:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
printf("输入10个整数依次为:\n");
for (int i = 0; i < 10; i++)
{
printf("%d\n", a[i]);
}
system("pause");
return 0;
}
运行结果
3 二维数组
3.1 二维数组的定义
int a[3][4]; 表示数组总共12个元素,可认为是3行4列,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]
a[i][j]表示第i+1行,第j+1列元素
int a[m][n]; 该数组右下角位置的元素只能是a[m-1][n-1]
注:二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是像一维数组只是一个向量。但是,实际的内存却是连续编址的,也就是说内存是按一维线性排列的。如何在一维存储器中存放二维数组,有两种方式:
一种是按行排列,即放完一行之后顺次放入第二行。
另一种是按列排列,即放完一列之后再顺次放入第二列。
在C语言中,二维数组是按行排列的。即:先存放 a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。
3.2 二维数组的使用
初始化
//方式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,3};//未初始化的元素自动为0
//方式4:
int a[3][4]={{1},{2},{3}};//未初始化的元素自动为0
//方式4:
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};//数组全部赋值,
//则第一维的长度可以不给出,因为是按行存储的
注:n维数组:因为内存是线性一维的,则n维数组可以当做每个元素n-1维数组的一维数组。