【从零开始的 C 语言笔记】第十三篇-Array介绍与应用(1)

不怎麽重要的前言

上一篇我们介绍了一个满好用的函式库,只要知道怎麽使用math.h的很多函式,都可以在我们需要数学运算时帮上很大的忙。

今天我们来介绍一下Array吧!


Array是什麽?

还记得第五篇我们有提到资料型态像是不同大小的盒子,而第六篇我们谈到变数就像被写上标签的盒子,可以存放资料内容,等待我们需要的时候就能呼叫变数做任何处理。

那array又是什麽样的概念呢?

array的中文翻译会叫他阵列,如果说变数是有特定大小(资料型态决定)的盒子,那array就像一栋拥有同样大小且叠再一起的盒子大楼,其中的每个盒子大小都是一致的,而各自的盒子(不同楼层)又可以存放不同的资料。

如下图这个样子:
https://ithelp.ithome.com.tw/upload/images/20211028/20142565B84rf6VtDH.png

而array的index编号(可以想像成楼层编号)则是由0.1.2.3等持续往後编,所以如果阵列大小(总楼层数)是8,编上楼层的话会长这样:
https://ithelp.ithome.com.tw/upload/images/20211028/20142565NDI7IFNBJ8.png

以下面这段程序码为例:

int arr[] = {1,2,3,4,5,6,7,8};

阵列arr的资料内容对应index(楼层编号)如下:
https://ithelp.ithome.com.tw/upload/images/20211028/20142565D83Vtai36b.png


正式使用Array

我们前面大概介绍了阵列是什麽东西,接下来我们来介绍一下怎麽使用吧!

  1. 宣告一个阵列
    阵列与变数一样,使用前都必须先宣告。

(1) 只给予阵列大小

int arr[10];

https://ithelp.ithome.com.tw/upload/images/20211028/20142565IboAwESqf8.png

(2) 不给阵列大小,但直接赋值

int arr[] = {1,2,3,4,5,6,7,8};

https://ithelp.ithome.com.tw/upload/images/20211028/20142565aCs8AUEnqX.png

(3) 给予阵列大小、赋值

int arr[5] = {1,2,3,4,5};
  1. 阵列的使用
    搭配前面所提到的index概念,array的资料内容和变数一样,是可以自由使用、处理的。

(1) 阵列内的资料内容
https://ithelp.ithome.com.tw/upload/images/20211028/20142565vOXbsYeOmm.png
如以下:

arr[2] = 777;

(2) 实际应用

#include <stdio.h>

int main(){
    int arr[]={1,2,3,4,5,6,7,8};

    printf("data of arr\n\n");
    printf("index 0: %d\n", arr[0]);
    printf("index 1: %d\n", arr[1]);
    printf("index 2: %d\n", arr[2]);
    printf("index 3: %d\n", arr[3]);
    printf("index 4: %d\n", arr[4]);
    printf("index 5: %d\n", arr[5]);
    printf("index 6: %d\n", arr[6]);
    printf("index 7: %d\n", arr[7]);
    printf("------\n\n");

    arr[2] = 777;

    printf("data of arr\n\n");
    printf("index 0: %d\n", arr[0]);
    printf("index 1: %d\n", arr[1]);
    printf("index 2: %d\n", arr[2]);
    printf("index 3: %d\n", arr[3]);
    printf("index 4: %d\n", arr[4]);
    printf("index 5: %d\n", arr[5]);
    printf("index 6: %d\n", arr[6]);
    printf("index 7: %d\n", arr[7]);
    printf("------\n\n");

    arr[2] = arr[2]-111;
    printf("data of arr\n\n");
    printf("index 0: %d\n", arr[0]);
    printf("index 1: %d\n", arr[1]);
    printf("index 2: %d\n", arr[2]);
    printf("index 3: %d\n", arr[3]);
    printf("index 4: %d\n", arr[4]);
    printf("index 5: %d\n", arr[5]);
    printf("index 6: %d\n", arr[6]);
    printf("index 7: %d\n", arr[7]);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565hZIAaaOy0p.png

  1. 阵列与变数不同的地方

变数名称使用时会直接代表其资料内容,要找到变数地址时还需使用到「&」,但阵列名称所代表的并不是阵列的资料内容,而是阵列地址本身,所以当你想要printf array时,并不会依序列印出array的资料内容。

#include <stdio.h>

int main(){
    int data = 5;
    int arr[] = {1,2,3,4,5};

    printf("data: %d\n", data);
    printf("address of data: %p\n", &data);
    printf("arr : %p\n", arr);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565MRk7sH3OKZ.png


Array小结

  1. 宣告阵列时需同时宣告阵列大小或同时赋值(因为会自动分配阵列大小)
int arr[10];
int arr[]={1,2,3,4,5,6,7};
int arr[5]={1,2,3,4,5};
  1. 阵列的index由0开始依序往後
    https://ithelp.ithome.com.tw/upload/images/20211028/20142565K5aI30UxaS.png

  2. 使用阵列内的资料内容时须以特定格式

arr[2] = 777;

https://ithelp.ithome.com.tw/upload/images/20211028/20142565Zfuvm6ihR1.png

  1. 并不能直接printf阵列名称,而印出整个阵列的资料内容,你会印出的只有阵列地址
#include <stdio.h>

int main(){
    int data = 5;
    int arr[] = {1,2,3,4,5};

    printf("data: %d\n", data);
    printf("address of data: %p\n", &data);
    printf("arr : %p\n", arr);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565xmu4kKnw3t.png


辛苦看到这里的你们,这样就大致介绍完array了,可以参考程序码自己测试看看,虽然不晓得这样的解释方式大家看不看得懂,但就尽力了QQ

下一篇稍微介绍一下array的延伸应用(应该算是啦?)!


<<:  【从零开始的 C 语言笔记】第十二篇-Math 函式库介绍与应用

>>:  【从零开始的 C 语言笔记】第十四篇-Array介绍与应用(2)

Day6 - 2D渲染环境基础篇 II [同场加映 - 非零缠绕与奇偶规则] - 成为Canvas Ninja ~ 理解2D渲染的精髓

路径绘制常令人感到疑惑的点 - 非零缠绕与奇偶规则 初学路径绘制的时候,大部分人应该会发现一种让人疑...

资安学习

Day 1 看到许多统计,提到现在很多企业最需要的就是保障公司的资讯安全,其实个人的资讯也是一样都是...

Day28 - [Shioaji] 超入门!永丰证券程序交易API快速上手 (1)

一晃眼,铁人赛就进入了尾声,先前一直说有时间要来写Shioaji的,总是不能食言。我想就用最後两篇的...

Day14【Web】网路攻击:域名劫持

域名劫持又称作域名污染 英文有多种称呼方式: DNS hijacking DNS poisoning...

队列

某些较耗时的工作像是寄信、发通知等,如果卡在处理请求的过程中的话就会造成使用者要多等上数秒才能收到回...