数组

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。

在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个元素的地址,即首地址。不需要取地址符号&