数组
格式;
数据类型 数组名[元素个数]
例:
int scores[10]
相当于定义了10个int类型的变量,[]扩起来的是元素的个数
通过下标来获取元素,下标从0开始,到数组元素个数-1,scores[0]...scores[9]
scores[0]代表第一个元素。
数组下标越界:超出了数组元素下标的个数,会报错或乱码
数组初始化
方式一:
像变量赋值一样,为数组的元素一次赋值
int scores[10]={1,2,3,4,5,6,7,8,9,0};
方式二:
一次为数组前面的元素赋值,如果数组长度超过元素个数,后面的值全部初始化为0
int scores[10]={0,1,2}; 相当于int scores=[10]={0,1,2,0,0,0,0,0,0,0}
方式三:
如果不写元素个数,后边的值有几个,元素个数就是几个
int scores[]={1,2,3} 数组长度为3
遍历一维数组:
for(int i=0;i<(sizeof(arr)/sizeof(arr[0]));++i)
{
printf("%d",arr[i])
}
数组在栈区
数组的内存结构:是一块连续的内存
求出数组元素个数:
int n =sizeof(数组名)/sizeof(数组元素|数组数据类型)
数组逆置
int arr[10] = {1,24,3,9,5,6,17,8,2,11};
int i = 0;
int j = sizeof(arr) / sizeof(arr[0])-1;
while (i<j)
{
int tom=arr[i];
arr[i] = arr[j];
arr[j] = tom;
i++;
j--;
}
冒泡排序
int arr[10] = {1,24,3,9,5,6,17,8,2,11};
int x = sizeof(arr) / sizeof(arr[0]) - 1;
for (int z = 0; z <= x; z++) {
for (int i = 0; i < x-z; i++)
{
if (arr[i] > arr[i + 1]) {
int tom = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tom;
}
}
}
二维数组
定义:
数据类型 数组名[常量表达式][常量表达式]
[][]
例:
int scores[2][3]
有两个长度为3的一维数组
scores[0]第一个一维数组 scores[0][0] 第一个一维数组的第一个元素
scores[1]第二个一维数组 scores[1][0] 第二个一维数组的第一个元素
初始化:
方式一:
int arr[2][3]={{1,2,3},{2,3,4}};
方式二:
int arr[][3]={{1,2,3},{2,3,4},{3,4,5}};
方式三:
int arr[4][3]={1,2,3,4,4,2,3,4,3,2,6,4};
三个一组,依次分配
方式四:
int arr[4][3]={"1",{2},{4},{3}};
未赋值的值为0;
遍历二维数组
for(int i=0;i<(sizeof(arr)/sizeof(arr[0]));++i)
{
for(int z=0;z<(sizeof(arr[i])/sizeof(arr[i][0]));++z)
{
printf("%d",arr[i][z])
}
}
字符数组与字符串
C语言中没有字符串这种数据类型,可以通过char的数组来替代;
字符串一定是一个char的数组,但char的数组不一定是字符串;
数字0(和字符‘\0’等价,ASCII中‘\0’就是0)结尾的char数组就是一个字符串,但如果字符数组没有以数字0结尾,那么就不是一个字符串,而是一个字符数组,所以字符串是一种特殊的char的数组。
例:
char arr[10] = { 'h','e','l','l','o' };
printf("%s",arr)
arr长度为10;
打印的是hello,因为未赋值的值为0,字符串碰到0截至
printf("%c",arr)
打印的是hello ,后边的不是空格
例:
char arr[] = { 'h','e','l','l','o' };
arr长度为5
例:
char arr[]="hello"
arr长度为6,隐藏了一个‘\0’
字符数组的输入
例一:
char arr[100];
scanf("%s", arr); 输入
printf("%s\n", arr); 输出
例二:
char arr[100];
gets(arr); 输入
puts(arr); 输出
字符数组的追加
例:
char str1[] = "abcdef";
char str2[] = "123456";
char arr[100];
int i = 0;
while (str1[i] != '\0')
{
arr[i] = str1[i];
++i;
}
int j = 0;
while (str2[j] != '\0')
{
arr[i + j] = str2[j];
j++;
}
arr[i + j] = '\0';
puts(arr);