专栏首页海天一树小朋友学C语言(20):数组

小朋友学C语言(20):数组

一、数组简介

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。 所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

二、动手编写一个简单的数组程序

#include <stdio.h>
int main()
{
    int a[5] = {2, 4, 5, 8, 20};
    for(int i = 0; i <= 4; i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }
    return 0;
}

运行结果:

a[0] = 2
a[1] = 4
a[2] = 5
a[3] = 8
a[4] = 20

分析: (1)int a[5]; 这是声明了一个数组,数组类型为整型,数组名为a,数组大小为5,表示可以放5个整型元素。

(2)a[5] = {2, 4, 5, 8, 20},这是赋值语句,类比于a = 1。不过通常说成是数组的初始化,而不是给数组赋值。注意,是用大括号把元素包含在内,而不是中括号或小括号。

(3)数组的下标是从0开始的,所以本程序中的五个元素为a[0], a[1], a[2], a[3], a[4],而不是a[1], a[2], a[3], a[4], a[5]。这从for循环也可以看出,for循环是从0增加到4,而不是从1增加到5。如果要获取a[5]或a[6],编译器会报数组越界的错误或者直接取到了0!。

(4)假如数组的大小为size,那么元素的最大下标为size - 1。以本程序为例,大小为5,则最大下标为4,即只能取到a[4]。

(5)如果把在数组声明后直接初始化,类似本程序这样的,可以不用写数组大小,运行效果完全一样。

#include <stdio.h>
int main()
{
    int a[] = {2, 4, 5, 8, 20};
    for(int i = 0; i <= 4; i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }
    return 0;
}

三、逐个给数组元素赋值

#include <stdio.h>
int main()
{
    int a[5];
    for(int i = 0; i <= 4; i++)
    {
        a[i] = 2 * i;
        printf("a[%d] = %d\n", i, a[i]);
    }
    return 0;
}

运行结果:

a[0] = 0
a[1] = 2
a[2] = 4
a[3] = 6
a[4] = 8

注意,在声明数组int a[5]的时候,因为不是立即初始化(跟上面的例子不一样),则数组大小(这里为5),不能省略。

四、浮点数数组

#include <stdio.h>
int main()
{
    float a[4] = {1.1, 2.2, 3.33, 5.555};
    for(int i = 0; i <= 3; i++)
    {
        printf("a[%d] = %f\n", i, a[i]);
    }
    return 0;
}

运行结果:

a[0] = 1.100000
a[1] = 2.200000
a[2] = 3.330000
a[3] = 5.555000

五、字符数组

#include <stdio.h>
int main()
{
    char c[] = {'H', 'e', 'l', 'l', 'o', '!'};
    for(int i = 0; i < 6; i++)
    {
        printf("%c", c[i]);
    }
    return 0;
}

运行结果:

Hello!

六、如果没有显示写出数组长度,求数组长度

#include <stdio.h>
int main()
{
    int a[] = {2, 4, 5, 8 ,20};
    printf("Size of int: %ld\n", sizeof(int));
    printf("Length of a: %ld\n", sizeof(a));
    printf("Size of a: %ld\n", sizeof(a) / sizeof(int));
    printf("====================\n");
    float b[] = {2.0, 3.2, 5.13, 8.8888,20};
    printf("Size of float: %ld\n", sizeof(float));
    printf("Length of b: %ld\n", sizeof(b));
    printf("Size of b: %ld\n", sizeof(b) / sizeof(float));
    printf("====================\n");
    double d[] = {2.0, 3.2, 5.13, 8.8888,20};
    printf("Size of double: %ld\n", sizeof(double));
    printf("Length of d: %ld\n", sizeof(d));
    printf("Size of d: %ld\n", sizeof(d) / sizeof(double));
    printf("====================\n");
    char c[] = {'H', 'e', 'l', 'l', 'o', '!'};
    printf("Size of char: %ld\n", sizeof(char));
    printf("Length of c: %ld\n", sizeof(c));
    int size = sizeof(c) / sizeof(char);
    printf("Size of c: %d\n", size);
    return 0;
}

运行结果:

Size of int: 4
Length of a: 20
Size of a: 5
====================
Size of float: 4
Length of b: 20
Size of b: 5
====================
Size of double: 8
Length of d: 40
Size of d: 5
====================
Size of char: 1
Length of c: 6
Size of c: 6

分析: 以int a[] = {2, 4, 5, 8 ,20}; 为例: 整型数每个占4字节,所以sizeof(int) = 4字节 数组a包含了5个整型数,计算出a的长度(即有多少个字节)sizeof(a) = 20字节 相除即得到a的大小(即个数)为sizeof(a) / sizeof(int) = 5个元素

七、作业

(1)断点调试第六部分中的程序 (2)默写第六部分中的程序

本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b),作者:海天一树

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小朋友学算法(6):求幂pow函数的四种实现方式

    在math.h中,声明了一个函数pow(x, n),用于求x的n次方。 假如咱们不调用math.h中的pow函数,如何实现求x ^ n的算法呢?

    海天一树
  • 信息学竞赛中何谓“打表”?

    众所周知,递归有一个极大的弊端就是效率特低。假如你不会别的方法(我才不告诉你用简单的递推就能AC)。那么你甘心只得一小部分分数吗?

    海天一树
  • 小朋友学C语言(29):switch case语句

    switch case语句与if elseif语句类似,都是从多个选择条件里选取一个来执行。 (一)先来看一个if elseif程序 #include <std...

    海天一树
  • C语言实现逆序输出0-9

    例22:C语言实现对数组元素依次赋值0,1,2,3,4,5,6,7,8,9,然后按照逆序输出。

    小林C语言
  • c语言之在函数内部改变数组的值从而影响外部数组的四种方式

    西西嘛呦
  • 指针3

    py3study
  • 学生信息管理系统(管理员)

    我一直以为学生信息管理系统是开源的,网上一搜一大把的那种。毕竟这种程序学完C之后都可以自己写一个,只有界面好看与否的问题。

    DeROy
  • Arrays工具、二维数组以及LeetCode练习题

    使用二分法查询 key 元素在 a 数组中的索引,如果数组不包含这个值,则返回负数。使用前要求这个数组是升序排列,才能得到正确结果。

    Carlos Ouyang
  • 萌新学习C++容易漏掉的知识点,看看你中招了没有(一)

           很多人,包括我,看书,看完一章怎么怎么的,然后不管是作业,还是考试出现这一章的内容,总有些地方跟我们脑袋里面理解的不一样,自己明明学习过,但机器给...

    花狗Fdog
  • commons-lang3工具类学习(一)

    add(boolean[] array, boolean element) 将给定的数据添加到指定的数组中,返回一个新的数组

    allsmallpig

扫码关注云+社区

领取腾讯云代金券