这篇文章介绍的是数组的定义、创建、初始化、使用,在数组中输入内容并输出数组中的内容,并探讨了数组在内存中的存储。里面有些内容建议大家参考下面的一些文章,有助于加深大家对于C语言的理解:
C语言(2)------->数据类型介绍 CSDN
C语言(3)-------->变量 CSDN
C语言(5)--------->printf函数 CSDN
C语言(6)------->scanf函数 CSDN
C语言(12)--------->for循环 CSDN
一、一维数组的定义
我们学习过变量,变量通常是用于存储某一个数据类型。例如,我们要表示一个人的年龄如何定义呢?年龄是一个整数,我们可以使用int型给它存储起来,例如这样:
int age;
在生活中,只存储一个数字的情况其实是非常少的。例如,一个班级里面有50个人,我们要存储这个班级的数学成绩,用什么去存储呢?这时候就要使用到数组了。
那什么是数组呢?C语言规定,一组相同类型的元素的组合就是数组。
二、一维数组的创建
在C语言中,数组的语法是怎样的呢?
数据类型 数组名[]
注意:[]里面放的内容是数字,这个数字是正整数。例如,要放10个数字,我们可以在[]里面填10。(当然填10以上的数字也是可以的)
我们看一组数据:
1 2 3 4 5 6 7 8 9 10
上面都是整数,那我们就可以使用整型数组来存储它们。
int Grade[10];
数组里面存的值我们就称为数组元素。
使用数组时,可以根据我们的需要去设计。
例如,我们要存放26个字母。我们怎么使用数组呢?
分析:
字母是字符类型,那我们的数据类型就使用的是char类型。
有26个字母,那么[]里面的数字就是26。
所以,它的创建方式是这样:
char letter[26];//letter的中文就是字母
三、一维数组的初始化
一维数组的初始化有两种形式,完全初始化、不完全初始化。
在初始化之前,我给大家复习一下变量的初始化。
int age;//定义一个整型变量
int Grade = 100;//定义一个整型变量并将它初始化为100
初始化就是给这个变量一个数值。
3.1完全初始化
完全初始化就是将数组的大小全部填满。
例如:
int arr[6] = {1,2,3,4,5,6};
3.2不完全初始化
完全初始化就是将数组的大小填一部分。
int arr[6] = {1,2,3};
温馨提示:
数组如果初始化了,可以省略数组的大小设定,因为编译器会根据数组初始化的内容来确定数组的真实大小。
int arr1[5] = {1,2,3,4,5};
int arr2[] = {1,2,3,4,5};
四、数组的类型
数组是自定义的数据类型。在C语言中,去掉数组名就是数组的类型。
例如:
int arr[10];
上面这个数组的数据类型就是去掉arr,也就是int [10]。
五、数组的使用
在C语言中,数组存放在内存中,这个章节先不深入探讨。
为了方便讲解,我们可以理解为一个数组中如果有10个元素,那这10个元素之间的关系好比宾馆中10间编号连着的房间,例如401 402 403 ......409 410。
我们创建并初始化一个数组来来解释。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
1到10的关系好比下面的格子:
这十个数字好比十个人住在十个单间里面。每一个单间实际上都有一个编号。编号是从0开始的。
这十个数字是由十个下标组成的。我们如果要查找某一个数字查找它的下标就可以了。
那如果我们要找到7这个数字怎么办呢?我们知道它的编号是6,那么我们如何访问它呢?这个时候就要使用C语言中的一个操作符——下标引用操作符[]
参考代码:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n",arr[6]);return 0;
}
运行结果:
知道如何访问数组了,现在我们可以来一个练习。
一个数组中存放了1到10这10个整数,请将这10个整数打印出来。
参考代码:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){printf("%d ",arr[i]);}return 0;
}
运行结果:
六、将数据输入数组中,并取出数组的值
我们知道数组的下标是从开始的,如果我们创建了1个数组大小为6的数组。那么下标是从0开始到5结束。
从一个大小为6的数组中输入数字,并且将它们打印在屏幕上如何实现呢?
分析:
1.开辟一个数组,数组中可以存放6个整数
2.输入数字
3.打印数字
参考代码:
#include <stdio.h>int main()
{//1.开辟一个数组,数组中可以存放6个整数int arr[6] = {0};int i = 0;//2.输入数字for (i = 0; i < 6; i++){scanf("%d",&arr[i]);}//打印数字for (i = 0; i < 6; i++){printf("%d ",arr[i]);}return 0;
}
运行结果:
七、数组在内存中的存储
我们买回来一台电脑之后,电脑中有内存,内存的作用是什么呢?
计算机处理的数据都需要加载在内存中处理。
然而内存又会被划分为一个一个的内存单元。通常来说一个内存就是一个字节。通过编号可以找到内存单元。编号也称为地址,在C语言中地址就是指针。
占位符%p用于表示指针的占位,指针就是地址。如果我们要使用printf函数打印地址,可以使用%p这个占位符。
创建一个数组,这个数组里面可以存放10个数字,那我们怎么知道这十个数组的地址呢?
参考代码:
#include <stdio.h>int main()
{//1.开辟一个数组,数组中可以存放10个整数int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;//2.打印地址for (i = 0; i < 6; i++){printf("&arr[%d]=%p\n",i,&arr[i]);}return 0;
}
x64环境下运行结果:
x86环境下运行结果:
我们可以看到,数组在内存中是连续存放的。随着下标的增加,地址是由小到大的。
八、数组大小的计算
数组是有大小的,那我们如何去计算数组的大小呢?
这里就要使用到sizeof这个关键字去计算了。
sizeof用于计算变量或类型的长度。
sizeof我简单举个例子。对它感兴趣或者想要知道更多的用法可以参考我之前的博客:
C语言(2)------->数据类型介绍中的3.1sizeof操作符介绍 CSDN
(1)sizeof的使用
计算一个整型的大小:
代码:
#include <stdio.h>int main()
{int a = 10;printf("%d\n",sizeof(a));//计算a变量的大小printf("%d\n", sizeof(int));//计算整型的大小return 0;
}
运行结果:
我们知道一个整型所占的字节数是4。
(2)sizeof在数组中的使用
那么一个存放了10个整型的数组它的大小是多少呢?我们如何通过C语言去计算呢?
参考代码:
#include <stdio.h>int main()
{int arr[10] = {0};printf("%d\n", sizeof(int));//计算整型的大小printf("%d\n", sizeof(arr));return 0;
}
运行结果:
这里我们可以看到计算的是数组的总大小。
(3)sizeof计算数组中的某个元素的大小
我们现在有一个存放了10个字母的数组,如果我要看第二个字符所占的大小,我们如何计算呢?(当然,这是一个常识问题,学过数据类型的都知道字符所占的字节数是1)
参考代码:
#include <stdio.h>int main()
{char arr[10] = { 0 };printf("%d\n", sizeof(char));//计算字符类型的大小printf("%d\n", sizeof(arr[1]));return 0;
}
运行结果:
(4)计算数组的大小
参考代码:
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7 };printf("%d\n", sizeof(arr));//计算数组的大小return 0;
}
运行结果:
(5)计算数组元素的个数
参考代码:
#include <stdio.h>int main()
{int arr[7] = { 1,2,3,4,5,6,7 };printf("%d\n", sizeof(arr));//计算数组的大小printf("%d\n", sizeof(arr)/ sizeof(arr[0]));//计算数组的个数return 0;
}
运行结果:
未定义数组大小可以计算出数组的大小:
参考代码:
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7 };printf("%d\n", sizeof(arr));//计算数组的大小printf("%d\n", sizeof(arr)/ sizeof(arr[0]));//计算数组的个数return 0;
}
运行结果: