C语言概括(数组)
一,数组的概念
数组:就是批量创建一组相同类型的变量。
二,数组的表达式
int arr[4] = {1,2,3,4};
int:就指批量创建一组int类型变量
arr:数组名
{1,2,3,4}:表示设置变量初始化
a) [4]中的4是可以省略的,数组的长度就和初始化列表里的元素个数一致;
b) [4]如果不省略的时候,后面的初始化元素个数不能比4多(否则就是未定义行为)
c) [4]如果不省略,后面的初始化列表的元素可以比4少,少的时候,就把数组剩下的元素填成0;
d) 创建数组的时候,[ ]里面的数字只能是一个常量,不能是变量.(在C89中);
e) 如果省略了[4]中的数字,就必须使{ }初始化;
f) 如果没有省略[4],并且也没有初始化,如果是一个局部变量就是上次残留的值;如果是一个全局变量,会被自动初始化为0;
三 字符数组的初始化
针对字符数组的初始化 :
(1)可以像普通数组一样使用{ }初始化
char str [] = {'a','b','c',};
这个数组长度为3
(2) 也可以使用" "来对一个字符串进行初始化
char str2 [] = "abc";
这个数组的长度为4(多了一个"\0")
四 数组的使用
(1) 求数组的长度
sizeof(arr)/sizeof(arr[0])
(2)取下标
[ ] 从0开始到 len-1结束,一旦下标越界就是未定义行为
(3)数组的元素处于连续的内存空间上
(4) C语言中的数组,当在函数传参,参与运算的时候,很容易就转成了指针(指向首元素的指针);
五 二维数组
(1)概念
二维数组:本质上也是一个一维数组,只不过每个元素又是一个一维数组(不管是几位数组本质上都是一维数组)
(2)表达式
int arr[3][4]={0};
a) 是一个长度为3的一维数组,每个元素又是长度为4的一维数组构成(3行4列)
b) 对于二维数组或者三维四维数组等更高维的数组,第一个[ ]中的数字可以省略,后续数字就不能省略了
c) 二维数组在内存上也是一个连续内存存储的空间
d)如果给数组初始化的时候这样写
int arr[3][4] = {
(1,2)
(3,4)
(5)
}
输出的结果为:
2 4 5 0
0 0 0 0
0 0 0 0
(因为逗号表达式 a,b,c的值就是最后一个逗号后面的值也就是c);
六 冒泡排序
#include<stdio.h>
void bubblesort(int arr[],int size){//每次从后往前遍历比较相邻元素,每一趟都能把最小值放在最前面
//bound是边界的意思,使用这个变量的值表示已排序区间和待排序区间的分界线
int bound = 0;//[0,bound)是已排序区间;[bound,size)是待排序区间
for(;bound < size;bound++){
//通过这个循环表示后续的比较相邻元素比较的趟数
for(int cur = size-1;cur > bound;cur--){//用size-1表示最后一个元素下标
if(arr[cur-1]>arr[cur]){//使用cur-1表示相邻元素
int tmp = arr[cur-1];
arr[cur-1] = arr[cur];
arr[cur] = tmp;
}
}
}
}
int main(){
int arr[] = {9,5,2,7,3,6,8};
int size = sizeof(arr)/sizeof(arr[0]);
bubblesort(arr,size);
for(int i = 0;i < size;i++){
printf("%d",arr[i]);
}
printf("\n");
}