目录
一、一维数组的创建和初始化
1.数组的创建
数组是一种相同元素类型的集合。
数组的创建:
type_t arr_name [const_n];
/ / type_t 是指数组的元素类型
/ / const_n 是一个常量表达式,用来指定数组的大小
举例:
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
其中,int,char,float,double就是数组的元素类型,10,10,1,20分别是数组的大小。
下面是一个错误示例:
int main()
{
int n = 0;
int arr[n] = { 0 };
return 0;
}
运行时编译器会报错:
这个原因其实前面也讲过:有些编译器在定义数组时,数组的大小必须是一个常量表达式,而上述代码中的n是变量。
注意:C99中引入了变长数组的概念,允许数组的大小用变量来指定,如果编译器不支持C99中的变长数组,那就不能使用,相反,支持C99的编译器可以使用变量来指定数组的大小。
2.数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
数组的初始化:
int arr1[10] = { 1,2,3 };
int arr2[] = { 1,2,3,4 };
int arr3[5] = { 1,2,3,4,5 };
char arr4[3] = { 'a',98,'c' };
char arr5[] = { 'a','b','c' };
char arr6[] = "abcdef";
不完全初始化:
int main()
{
int arr1[10] = { 1,2,3 };
return 0;
}
像这种,定义的数组大小是10,而大括号内的元素数只有3个,这就叫做不完全初始化,系统会默认后面7个元素为0。打开监视页面可以看到:
注意: 初始化的元素数可以小于定义数组的大小,但是一定不能超过数组的大小。
我们在定义数组时,也可以不写数组的大小:
int arr1[10] = { 1,2,3 };
int arr2[] = { 1,2,3 };
这时系统会根据初始化数组中元素的个数自动确定数组的大小,运行并打开监视页面:
在初始化字符数组时,以下两种写法的结果是一样的:
char arr4[] = { 'a',98,'c' };
char arr5[] = { 'a','b','c' };
因为字符b的ASCII值就是98。
不初始化:
对局部变量不进行初始化,会生成随机值,而对全局变量不进行初始化系统会默认值为0。
局部变量:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr1[10];//局部变量
int i = 0;
for (i = 0; i <= 10; i++)
{
printf("%d\n", arr1[i]);
}
return 0;
}
代码中数组arr1没有初始化,运行结果为:
全局变量:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int arr1[10];//全局变量
int main()
{
int i = 0;
for (i = 0; i <= 10; i++)
{
printf("%d\n", arr1[i]);
}
return 0;
}
运行结果:
全局变量和局部变量不初始化的结果不同,本质原因是:存储的区域不同,存储在栈区的不初始化就是随机值,存储在静态区的不初始化就是0。
3.一维数组的使用
前面讲过,数组的下标是从0开始的,数组元素可以通过下标来访问:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
//下标: 0 1 2 3 4
printf("%d\n", arr[4]);//打印下标为4的数组元素
return 0;
}
运行结果是:5。下标为4的数组元素arr[4]是5。其中,[ ]是下标引用操作符,arr和4是[ ]的两个操作数。
当定义数组的大小比较大时,我们不用一个一个输入去赋值,可以通过写代码的方式对其赋值:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[10] = { 0 };//数组的不完全初始化
//计算数组的元素的个数
int sz = sizeof(arr) / sizeof(arr[0]);
//对数组内容赋值
int i = 0;
for (i = 0; i < 10; i++)
{
arr[i] = i + 1;
}
//打印出数组
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);