数组: 相同数据类型的一组数据
1.声明一个数组: 数据类型 数组名[常量表达式] = {初值1,初值2,初值3,......};
2.数组个数可以用变量表示,但是不可以进行初始化
例: int count = 5;
int array[count] = {1, 3, 4, 2, 5}; 错误
3.如果声明数组时,数组元素个数大于 初始化给出的数组元素初值个数 系统 会自动补0
int array[5] = {0}; // 相当于 int array[5] = {0,0,0,0,0};
4.如果数组声明的时候没有给定元素个数 那么初值有几个元素 这个数组就有几个元素
int arr4[] = {2, 3, 4, 6, 8};
5.声明一个字符型的数组
char str[] = {'s', 't', 'r'};
6.字符串
char str1[] = "string";
7.取出数组中元素
使用 数字名[下标] 下标从0开始
8.输出数组中的所有元素:遍历
int array[6] = {27, 19, 22, 23, 45, 123};
for(int i = 0; i <= 5;i++){ //循环输出
printf("%d\t",arr[i]);
}
9.数组越界问题:
1.系统不会提示越界 需要自己注意
2.切记不要数组越界
10.数组在内存当中 是一段连续的存储区域
并且 数组名字 就是 数组元素的首地址(第一个元素的地址)
注意: 数组不能直接赋值 : array1 = array 2; 错误
数组的名字 是元素的首地址 并且地址是一个常量 常量是程序执行期间不能被改变的量 所以数组不能直接被赋值
11.数组排序 冒泡排序
精髓:前后两个数比较大小 前面大于后面的 两个都交换位置 依次继续
例:随机产生10个[20,40]的数,并对十个数按从小到大排序
int array[10];
int temp;
printf("输出数组:\n");
for(int i = 0; i < 10; i++){
array[i] = arc4random() % (40 - 20 + 1) + 20;
printf("%d",array[i]);
}
printf("从小到大排序为:\n");
for(int i = 0; i < 9; i++){// 外层循环控制比较的趟数
for(int j = 0; j < 9 - i; j++){// 内层循环 控制每趟比较的次数
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
for(int i = 0;i < 10; i++){
printf("%d\t",array[i]);
}
12.字符数组的两种表现形式 iphone
<span style="white-space:pre"> </span>char str1[] = {'i', 'p', 'h','o', 'n', 'e'};
char str2[] ="iphone"; // 字符串
注意:(1) 字符串比字符数组多一个'\0'
(2)'\0'用于结束字符串
13.打印数据类型或者变量所占字节数的函数 sizeof
<span style="white-space:pre"> </span>printf("%lu",sizeof(str1)); // 输出结果6
printf("%lu",sizeof(str2));// 输出结果7 多一个'\0'
// %lu 无符号的长整型
// unsigned long number1 = sizeof(str1);
14.计算字符串的长度
strlen(要计算的字符串) 打印有效长度
从第一个字符开始如果不是'\0' 长度加1 遇到'\0'结束 并且输出长度不包含'\0'
<span style="white-space:pre"> </span> <span style="font-size:18px;">char str[] = "I Love You";
<span style="white-space:pre"> </span>char str1[] = {'2', 's', 'd', 'f', 'g'};
<span style="white-space:pre"> </span>printf("%lu",strlen(str)); 输出10
<span style="white-space:pre"> </span>printf("%lu",strlen(str1)); 输出11 (随机的数值)</span>
15.字符串的拷贝
从第一个字符开始拷贝 遇到\0结束
注意:目标字符串的长度最好大于源字符串
<pre name="code" class="html"><span style="font-size:18px;"><span style="white-space:pre"> </span>// strcpy(目标字符串,源字符串 );
char str1[] = {0};
char str2[] = "I Love You";
strcpy(str1,str2);
// 打印字符串 用%s 逐字输出字符 知道遇到'\0'结束
<span style="white-space:pre"> </span>printf("%s",str1) // 输出结果:I Love You</span>
<span style="font-size:18px;"> </span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">16.字符串的拼接</span>
注意:被拼接的字符串长度一定要能够接受完整的字符串
// 把后面的str2 拼接到str1的后面
<span style="font-size:18px;"><span style="white-space:pre"> </span>strcat(str1,str2);</span>
17.字符串比较
<span style="font-size:18px;"><span style="white-space:pre"> </span>char str1[] = "I Love You";
<span style="white-space:pre"> </span>char str2[] = "I Miss You";</span>
// 接收比较结果
// 从第一个字符开始比较 如果一样 继续看第二个字符 如果不一样 开始进行比较 比较的内容是该字符在 ASCII码表中的对应数 前面的减去后面的 得到一个返回值 返回值是正数 前面大 反之后面大 然后比较结 束 如果返回值是0 那么两个字符串相同
<span style="white-space:pre"> </span>int number =strcmp(str1,str2);
<span style="white-space:pre"> </span>printf("%d",number);