学习一个新的知识,总是从它的定义,到它的声明,再到它的使用.
1.1数组定义 : 是保存多个相同数据类型的多个数据 ,数组 相当于一个容器
1.2 数组声明: 数据类型 数组名[常量表达式(表示你有几个初值,即元素的个数)] = {初值1,初值2.....};
需求:声明一个数组,用来保存年龄 int age[ 3 ] = {24, 12, 22};
1.3 取出数组中的数据 使用 数组名[下标] ,切记下标从 0 开始
int a[5] = {1,2,3,4,5};
// 遍历,输出所有值
for(int i = 0;i < 3;i++){
// 修改数据
if(i = 2){
a[i] = 20;
}
printf("%d \n ",a[i]);
}
一些小体普斯:(1)如果声明数组时,数组元素的个数 > 给出的初值的个数 , 系统 会 自动 用0 补齐 int a[ 5] = {1,2,3,4 }; 等于 int a[5] = {1,2,3,4,0};
(2)如果声明时没有给出元素的个数,那么初值有几个元素,那么数组就有几个元素 int a[ ] = {1,2,3,45,};
(3)系统不会提示系统越界 ,需要自己注意 ,切记 : 不要数组 越界
(4)数组在内存当中,是一段连续的存储区域; 数组名相当于一个数组开始的首地址(也是第一个元素的地址)注意:数组不能直接赋值 , array1 = array2 是错误的 . 数组的名字是 元素的首地址 ,地址 是一个常量 ,而常量是在程序执行期间不能被改变的量,所以数组不能直接 被赋值
1.4 经典例题
// 冒泡排序
// 精髓: 前后比较大小,如果前面大于后面 两个数交换wizhi 一次继续
// 比较趟数 : 数组元素个数 - 1;
// 每趟比较的个数: 元素个数 - 1 - i;
// sizeof(a) / size(int) 求出 数组的元素个数 = 数组a的所占字节数 / int 类型 所占字节数
int array[ 7] = {9,3,5,1,7,8,4};
for(int i = 0;i < sizeof(a) / sizeof(int) - 1;i++){
for(int j = 0;j < 7 - i - 1;j++){
// 比较过程
if(array[j] > array[j + 1]){
int temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
// 排序
printf("排序后:\n");
for(int k = 0; k < 7;k++){
printf("%d ",array[k]);
}
1.5 声明一个字符型的数组 (有两种形式)
// 普通的字符数组形式
char s[ ]= {'i','p','h','o','n','e'};
// 字符串形式
char str[ ]= "iphone";
两种形式的区别:字符串比字符数组多一个'\0'; 字符串是字符数组,但字符数组不一定是字符串
char str1[ ]={'i','p','h','o','n','e'};
char str2[ ] = "iphone";
// 打印数据类型和变量 的 所占字节数的函数 sizeof
// 占位符 用%lu 无符号长整形
printf("%lu",sizeof(str1) ); // 6个字节
printf("%lu",sizeof(str2)); // 7个字节,多一个'\0',要算进去
字符串的四个数:
(1) 计算字符串的长度 strlen
// 打印的是有效长度,不算'\0'在内 . 从第一个字符开始,如果不是'\0' 长度开始加1,直到遇到'\0'结束.也就是说strlen求字符数组长度,因为字符数组没有'\0'
printf("%lu",strlen(str));
(2)字符串的拷贝 strcpy(目标字符串,源字符串)
// 拷贝:从第一个字符开始拷贝 遇到 '\0'结束
// 注意:目标字符串的长度最好大于源字符串
char str [20] = {0};
char str1[] = "FUCK U";
strcpy = (str,str1);
// 打印字符串 用占位符%s 一个字符一个字符输出,如果遇到'\0'结束
printf("%s\n",str);
(3) 字符串的拼接 strcat(str1,str2) 把str2拼接到str1后面
// 注意: 被拼接的字符串长度一定要够接收拼接完的字符串
char str1[] = "I";
char str2[] = "Love U";
strcat(str1,str2);
(4) 字符串的比较 strcmp(str1,str2)
// 从第一个字符开始比 ,如果一样,比较下一个字符,如果不一样,开始进行比较,比较的内容是相应的ASCll码的值,前面的减去后面的,如果值为正数
,前面的大于后面的,值为负数,前面的小于后面的.比较结束. 如果返回值是0,那么两个字符串相同.
char str1[] = "I";
char str2[] = "Love U";
int x = strcmp(str1,str2);