数组
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
数组的定义
dataType arrayName[length];
daraType,表示数据类型,arrayName为数组名称,length为数组长度。
- 数组中每个元素的数据类型必须相同,对于
int a[4],每个元素必须为int - 数组下标必须是整数,取值范围为0 ≤ index < length.
- 数组是一个整体,它的内存是连续的。
数组的初始化
int a[4] = {20, 345, 700, 22};
当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:对于short、int、long,就是整数0;对于char,就是字符 '\0';对于float、double,就是小数0.0
二维数组
二维数组的定义:
dataType arrayName[length1][length2];
二维数组在概念上是二维的,但是在内存中地址仍然是连续的,C语言中,二维数组是按行排列的,先存放a[0]行,再存放a[1]行,依次存放。
实例代码2.3.1-二维数组
| A | B | C | D | E | |
|---|---|---|---|---|---|
| Math | 80 | 61 | 59 | 85 | 76 |
| English | 75 | 65 | 63 | 87 | 77 |
| C prog | 92 | 71 | 70 | 90 | 85 |
求每科的平均成绩和各科总平均成绩:
#include <stdio.h>
int main(){
int i, j; //二维数组下标
int sum=0; //当前科目的总成绩
int average; //总平均分
int v[3]; //各科平均分
int a[5][3]; //用来保存每个同学各科成绩的二维数组
printf("Input score:\n");
for(i=0; i<3; i++){
for(j=0; j<5; j++){
scanf("%d", &a[j][i]); //输入每个同学的各科成绩
sum+=a[j][i]; //计算当前科目的总成绩
}
v[i]=sum/5; // 当前科目的平均分
sum=0;
}
average =(v[0]+v[1]+v[2])/3;
printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);
printf("Total:%d\n", average);
return 0;
}
字符串数组
char str[] = "hello world!";
在C语言中,字符串总是以\0作为串的结束符。上面的字符串,编译器自动在末尾添加了\0。
C语言中,数组名就代表了该数组的地址,整个数组是一块连续分配的内存单元。数组名所代表的地址为第0个元素的地址,即首地址。不需要取地址符号&