接上一篇 自学C语言——分支和循环应用(猜数字游戏)
1.数组的概念
数组是一组相同类型元素的集合。
- 数组中存放的是1个或多个数据,但是数组元素个数不能为0。
- 数组中存放的多个数据,类型是相同的。
数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
2.一维数组的创建和初始化
数组创建
基本语法:
type arr_name[常量值];
type——类型
arr_name ——数组名
常量值——别是数组的大小(元素个数)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int math[20];
char ch[5];
float s[10];
return 0;
}
数组的初始化
数组在创建的时候,给定一些初始值,称为初始化。
初始化一般使用大括号,将原数据放在大括号中。
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第一个元素初始化为1,剩余元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1,,2,3,4};
int main()
{
//int a = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化
int arr1[10] = { 1,2,3 };//不完全初始化,剩余的默认初始化为0
int arr2[10] = { 1,2,3 };//初始化的值不能比数组的元素多
int arr3[10] = { 'a','b','c' };//0=/0
int arr3[] = {1,2,3 };//数组如果初始化,可以省略掉数组的大小,可以根据初始化内容自动推算元素的个数
return 0;
}
数组的类型
int main()
{
//int arr[10];//arr的类型是int[10]
//int a = 10;
//printf("%zd\n", sizeof(a));//4
//printf("%zd\n", sizeof(int));//4
int arr[10] = { 0 };
//printf("%zd\n", sizeof(arr));//40
//printf("%zd\n", sizeof(int[10]));//40
printf("%zd\n", sizeof(arr));//40
printf("%zd\n", sizeof(int[5]));//20
return 0;
}
3.一维数组的使用
一维数组可以存放数据,存放数据的目的是对数据的操作
数组的下标
数组的下标从0开始,假设有n个下标,最后一个元素的下标是n-1。
在C语言中,数组的访问提供了一个操作符[ ],叫:下标引用操作符
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n",arr[6]);//下标引用操作符,输出7
return 0;
}
数组元素的打印
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// 0,1,2,3,4,5,6,7,8,9
int i = 0;
for ( i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
输出:
1 2 3 4 5 6 7 8 9 10
数组的输入
int main()
{
int arr[10] = {0};
int i = 0;
//输入
for ( i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
//输出
for ( i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
如果输入多个数据,不会报错,读取结束后直接暂停
arr是数组名,数组名是数组的起始地址,print arr无法打印数组内容。
4.一维数组在内存中的储存
内存会被划分为一个个内存单元,一个单元的大小是1个字节,每个内存单元都有一个编号,这个编号就是地址。
一维数组在内存中是连续存放的,随着下标的增长,地址是由小到大变化的
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("&arr[%d] = %p\n",i, &arr[i]);//%p打印地址
}
return 0;
}
输出:(X64,16进制)每一次运行都不一样
&arr[0] = 00000019351CF538
&arr[1] = 00000019351CF53C
&arr[2] = 00000019351CF540
&arr[3] = 00000019351CF544
&arr[4] = 00000019351CF548
&arr[5] = 00000019351CF54C
&arr[6] = 00000019351CF550
&arr[7] = 00000019351CF554
&arr[8] = 00000019351CF558
&arr[9] = 00000019351CF55C
X64——64位的环境,地址较长
X86——32位的环境,地址较短
int占4个字节,arr每个差4
十进制0~9
十六进制0~9+A~F
5.sizeof计算数组元素个数
sizeof可以计算类型或者变量大小,也可以计算数组的大小。
int main()
{
int arr[10] = { 0 };
printf("%zd\n", sizeof(arr));
printf("%zd\n", sizeof(arr[0]));
printf("%zd\n", sizeof(arr)/sizeof(arr[0]));
return 0;
}
//输出结果:
40(单位字节)
4
10
优化:
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for ( i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
——————————End——————————