C语言入门第十二篇,数组

数组是c语言的重要数据类型,我们前面讲的变量,都是一个一个的去声明,我们可不可以声明一个数据类型的集合呢?我们今天讲的数组就可以办到。
数组可以连续存放相同数据类型(这里注意连续存放,是指内存中开辟的空间是连续的)。我们来看看如何声明:

int a[5];//声明数组

这段代码就是声明一个5个元素的a数组,数组元素的类型是整型。a是数组的名字,和变量的名字一样。我们如何对数组元素进行赋值呢?有几种方式。
1.声明的时候就赋值。

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

声明的时候就初始化,有些人可能想问如果我后面没有5个数(int a[5]={1,2,3};)会怎样?编译器会将后面的元素全部置为0。如果我多一个数呢?(int a[5]={1,2,3,4,5,6};),很抱歉这样做是错误的,编译器会报错。

2.单独赋值。

a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;

这里需要注意数组的元素可以通过下标来调用,但是下标是从零开始的。当我们声明int a[5]的时候我们的下标是从0-4,而不是1-5。我们才学了循环所以上面的代码可以写成:

int i;
for(i=0;i<5;i++)
{
    a[i]=i+1;
}

数组的元素如果没有赋值,编译器会随机给一个值(上面那种是赋值不完全的情况,这种是完全没有赋值的情况)。
我们也可以自己来输入数组元素的值。

int i;
for(i=0;i<5;i++)
{
    scanf("%d",&a[i]);
}

这里都是之前的基本操作,新的东西就是这个数组元素。大家一定要记得取地址符号因为数组元素也是一个变量,所以它和变量没有什么区别。

输出数组和输入数组差不多,这里就不讲了,大家自己试试。

数组在声明的时候就必须给出长度,那么我们能不能不给长度呢?当然可以,但是是有条件的。唯一的方法如下:

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

编译器自动计算出这个数组的元素为6个。

上面举例的时候用的都是int,大家可以试试double等等这些数据类型。当然字符型也是可以的,字符型数组每个元素存储一个字符。下面举个字符数组的例子:

char b[]={'h','e','l','l','o'};

上面的初始化大家肯定觉得很麻烦,C语言标准中给出了另一种方式:

char b[]="hello";

是不是要简单的多?注意这里是双引号而不是单引号哦,其实有点基础的人都知道双引号代表字符串,单引号代表字符。c语言对字符的处理并不像有些语言那么灵活,关于字符串的东西我们后面学了指针过后会专门一章来讲。

二维数组

上面讲的是一维数组类似一个表格的一行多列(多个元素)。二维数组类似多行多列的表格。看下面看具体语法:

int a[2][3];

上面表示一个二维数组,有2行3列,六个元素。

我们先对它进行赋值,再说其他的问题。

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

和一维数组类似,但是这里需要将每行都用大括号括起来。

我们看下面的图可能更好的理解二维数组

aij 0 1 2
0 1 2 3
1 4 5 6

这样来看可能更加直观一些,类似矩阵。和一维数组一样,二维数组的下标也是从零开始的。(例如,a12代表第二行第三个元素)

赋值方式也类似上面的一维数组。我们来看看用循环实现赋值。

int a[2][3];
    int i,j,k=1;
    for(i=0;i<2;i++)//循环两次
    {
        for(j=0;j<3;j++)//每次循环三次
        {
            a[i][j]=k++;
        }
    }

上面这个程序实现数组a[2][3]的赋值,我们这里第一次用到for循环的嵌套,大家要好好理解这段嵌套循环的代码。

除了二维数组以外还有三维,四维。。。想多少维就多少维数组,但是它们都和二维数组类似,理解就好。而且我们一般也不会用到那么高维的数组。

上面的代码我都给的是核心的一部分,希望大家自己去敲出完整的代码,然后在编译器里面运行一下。

注:
我们可不可以写一个数组长度不确定,让用户自己确定长度的数组呢?

    int n;
    scanf("%d",&n);
    int a[n];   

像上面这样做可以吗?答案是要看编译器,c89的编译器标准肯定不可以,c99以后的都是可以的。再看看下面的代码:

    int n;
    int a[n];
    scanf("%d",&n);

这段代码编译是没有问题的,但是大家小心为妙,我并不知道编译器是怎样处理这段代码的。

总结
数组是c语言重要的数据类型,需要好好掌握对它的声明,赋值等基本语法。

练习
1.编写一个程序,手动输入一个3行4列的二维数组,并像表格一样排列打印出来

你可能感兴趣的:(待它如初恋的c语言,C语言入门,c语言,数据,数组)