数组

一、数组的概念

1、数组是多个元素的组合。

2、数组内的所有元素数据类型必须相同。

3、每个元素在数组中都有一个下标,用来表示它在数组中的序号,下标从0开始计算。

4、数组的容量不能改变。

二、数组的定义

同其他变量一样,数组也是要先定义再使用。

int a[8];    //表示定义了一个名为a的数组,这个数组中,含有8个元素,每个元素的数据类型均为整形变量,每个元素占四个字节的存储空间

a[0]=1;    //表示将a数组中的第一个元素赋值为1

三、数组的初始化

在定义一个数组的同时,就设置数组内元素的值。注意使用大括号

情况一

#include <stdio.h>
int main()
{
    int a[8] = { 0,1,2,3 };
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%d,a[5]=%d,a[6]=%d,a[7]=%d\n",
        a[0], a[1],a[2],a[3],a[4],a[5],a[6], a[7]);

    return 0;
}

a[0],a[1],a[2],a[3]分别初始化为0,1,2,3,其他值均初始化为0 

情况二

#include <stdio.h>
int main()
{
    int a[] = { 0,1,2,3 };
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d\n",a[0], a[1],a[2],a[3]);
    printf("数组a所占的字节数为:%d 数组a的元素个数为:%d", sizeof(a), sizeof(a) / sizeof(a[0]));

    return 0;
}

定义数组a,这个数组包含4个元素

注意初始化时使用情况二,在只定义而没有初始化值时不能使用。

初始化的常见错误

1、初始值太多,超出数组容量

2、不能对数组名直接赋值,如:

char a[8];

a={'a','b','c','d'};//是不正确的

3、下标不能越界

四、数组的访问

通过“数组名[下标]”访问,注意下标从0开始,不要越界,越界是指下标超出正常的范围

五、字符串的存储

情况一:

#include <stdio.h>
int main()
{
    char a[10] = "China";
    printf("a=%s\n", a);

    return 0;
}

情况二:

#include <stdio.h>
int main()
{
    char a[] = "China";
    printf("%d\n", sizeof(a));

    return 0;
}

注意字符数组最后一个字符的后面会存储一个0作为字符串结束符。

六、字符串的输入

1、scanf

从第一个非空白字符开始读取,直到读到空白字符为止(不包括空白字符)

数组名本身表示一个地址,所以数组名前不需要加取地址符号&

#include <stdio.h>
int main()
{
    char a[16];
    scanf("%s",a);//输入hello world,会输出hello
    printf("a=%s", a);

    return 0;
}

缺点:

1、不能读取空格、制表符,因为被当作分隔符被处理了

2、容易导致越界

2、gets

遇到回车符结束,相当于读取一行,不包括行尾的回车符

能够读取回车符、制表符,但不能读取回车符

使用方便

格式:gets(字符数组名);

#include <stdio.h>
int main()
{
    char a[16];
    gets(a);//输入hello world,会输出hello world
    printf("a=%s", a);

    return 0;
}

缺点:容易导致越界

3、fgets

能够有效防止越界的问题,非常安全,能够读取回车符

格式:fgets(字符数组名,n,stdin);  //n表示字符数组的容量,一般写为sizeof(字符数组名),stdin表示标准输入设备。即表示从标准输入设备中最多读取n-1个字符,因为字符结束符也占一个字节的存储空间

情况一:

#include <stdio.h>
int main()
{
    char a[8];
    fgets(a,8,stdin);//输入hello world,会输出hello w
    printf("a=%s", a);

    return 0;
}

 情况二:

#include <stdio.h>
int main()
{
    char a[16];
    fgets(a,16,stdin);
    printf("a=[%s]\n", a);

    return 0;
}

 

posted @ 2019-02-22 15:56  小白Hello_world!  阅读(361)  评论(0编辑  收藏  举报