文章目录
一、一维数组
相同类型有限数据的一个集合
1.单一性:数据类型一致。
2.连续性:数组存放空间连续
3.有序性:数组存放顺序有序
1、数组的定义
数据类型 数组名[元素个数];
int a[5];
int a[2+3];
int a[5+5];
double d[5];
char c[5];
int a[n+3]; //错
int a[n]; //错
数组名和变量名要求保持一致
注意:
数组定义时,元素个数必须为常量
2、数组元素访问
数组名[元素下标];
元素下标:可以是常量、变量、常量或变量表达式
int a[5];
a[0]
a[1]
a[2]
a[3]
a[4]
a[n]
a[n+1]
a[1+1]
注意:
1.数组第一个元素下标从0开始,到元素个数-1
2.5个元素的数组中没有a[5]元素
3、数组元素初始化
初始化 != 赋值
1.全部初始化:
int a[5] = {1, 2, 3, 4, 5};
2.局部初始化:
int a[5] = {1, 2, 3};
没有给定初值的元素统一初始化为0值
int a[5] = {0};
3.默认初始化:
int a[] = {1, 2, 3, 4, 5};
注意:
1.初始化 != 赋值
int a[5] = {1, 2, 3, 4, 5}; //对
int a[5];
a = {1, 2, 3, 4, 5}; //错
a[5] = {1, 2, 3, 4, 5}; //错
4、数组的存储
sizeof(a):数组所占空间大小
sizeof(a[0]):每个元素所占空间大小
元素个数(len): sizeof(a) / sizeof(a[0])
5、数组常见操作
1.获得最大值,最小值
2.获得最大值,最小值下标
3.数组元素的倒置
4.排序(冒泡排序)
5.排序(选择排序)
二、二维数组
1、数组的定义
数据类型 数组名[行数][列数];
数据类型 数组名[第一维大小][第二维大小];
int a[2][3];
double d[2][3];
char c[2][3];
注意:
数组定义时行数、列数必须为常量或常量表达式,不能为变量或变量表达式
2、数组元素访问
数组名[行下标][列下标]
行下标范围: 0 - 1
列下标范围: 0 - 2
a[0][3] //错
a[2][0] //错
行下标、列下表:常量或者变量或者表达式
3、二维数组初始化
1.全部初始化:
int a[2][3] = {1, 2, 3, 4, 5, 6};
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
2.局部初始化:
int a[2][3] = {1, 2, 3};
int a[2][3] = {{1, 2}, {3}};
int a[2][3] = {0};
int a[2][3] = {{0}};
3.默认初始化:
int a[][3] = {1, 2, 3, 4, 5, 6};
int a[][3] = {1, 2, 3, 4};
int a[][3] = {1, 2, 3};
int a[][3] = {{1, 2}, {3}};
注意:
行能省略,列不能省略
三、字符型数组
在C语言中字符型数组用来存储字符串
1、字符型数组的定义
char 数组名[元素个数];
char ch[32];
"hello"
注意:
1.元素个数必须为常量或常量表达式
2.元素大小必须能存放下字符串和末尾的\0字符
字符型数组和字符串的区别:
1.字符串:一定包含最末尾的\0字符
2.字符型数组:一组字符的集合,最末尾不需要一定是\0字符
2、字符型数组的输入输出
输出:
1.printf("%s\n", str);
2.puts(str);
输入:
1.scanf("%s", str);
2.gets(str);
scanf只能接收不带' '的字符串
gets可以接收带' '的字符串
3、字符型数组的初始化
1.全部初始化:
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[6] = {"hello"};
char str[6] = "hello";
2.局部初始化:
char str[6] = {'h', 'e', 'l', '\0'};
char str[6] = {0};
char str[6] = {"hel"};
char str[6] = "hel";
0 -> '\0'
48 -> '0'
3.默认初始化:
char str[] = {"hello"};
char str[] = "hello";
char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
初始化 != 赋值
4、字符型数组的存储
字符型数组所占空间大小: 元素个数
字符串的长度: 从字符串开头到\0中间元素的个数(不包含\0)
5、字符串操作
都需要引入 #include <string.h>
1、获得字符串的长度(lenstr)
len = strlen(str);
2、 字符串的拷贝(strcpy)
strcpy(str, "hello world");
将字符串hello world\0拷贝到str数组中
注意:
目的空间大小必须保证能够存放下字符串
3、字符串拼接(strcat)
char str1[32] = {"hello"};
char str2[32] = {"world"};
strcat(str1, str2);
注意:
目的空间必须能够存放下拼接后的字符串
4、字符串比较(strcmp)
char str1[32] = {"hello"};
char str2[32] = {"world"};
strcmp(str1, str2);
返回0:两个字符串相同
返回>0:第一个字符串 > 第二个字符串
返回<0:第一个字符串 < 第二个字符串
两个字符串从左至右比较,第一个不相同字符的ASCII码值越大,字符串谁越大
5、字符串遍历
char str[32] = {"hello world"};
int i = 0;
while (str[i] != '\0')
{
str[i];
i++;
}