#include <stdio.h>
#include <string.h>
1、数组 ---数组是一组相同类型元素的集合。
1.1一维数组
1.1.1数组的创建
type_t arr_name[const_n]
type_t 指数组的元素类型
const_n 是一个常量表达式,用来指定数组的大小
int arr[10];
char ch[n]; //error ---[]里的n不是常量
1.1.2数组的初始化--赋值
int arr[10] = { 1, 2, 3 }; //不完全初始化,剩下的元素默认初始化为0
char arr2[5] = {'a','b'}; //b可以替换成98
char arr3[5] = "ab"; --可以
char arr4[] =="abcdef";
int main()
{
char arr4[] = "abcdef";
printf("%d\n", sizeof(arr4)); --7//sizeof 计算arr4所占空间的大小 算完\0为止
printf("%d\n", strlen(arr4)); --6//strlen 求字符串的长度 算\0前的字符个数 \0不计入
return 0;
}
strlen和sizeof没有什么关联
strlen是求字符串长度的-- 只能针对字符串求长度 --是库函数
sizeof 计算变量、数组、类型的大小--单位是字节 --是操作符
int main()
{
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("%d\n", sizeof(arr1)); //4
printf("%d\n", sizeof(arr2)); //3
printf("%d\n", strlen(arr1)); //3
printf("%d\n", strlen(arr2)); //没找到"\0",随机值
return 0;
}
1.2二维数组 ---二维数组在内存中也连续存放,一行内部及跨行皆连续
int main(){
int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int arr1[][4] = { { 1, 2 }, { 3, 4 }, { 4, 5 } }; //行不能省略
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
/* printf("%d ", arr[i][j]);
*/printf("arr[%d][%d] = %p\n",i,j,&arr[i][j]);
}
}
int* p = &arr[0][0];
for (int b = 0; b < 12; b++)
{
printf("%d ", *p);
p++;
}
return 0;
}
冒泡排序法 int arr[10] = {9,8,7,6,5,4,3,2,1};--两两相连的元素进行比较,对比后可交换
void bubble_sort(int arr[],int num)
{
for (int i = 0; i < num-1; i++)
{
int flag = 1;
for (int j = 0; j < num - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j + 1];
arr[j+1] = arr[j];
arr[j] = tmp;
flag = 0;
}
}
if (flag == 1)
{
break;
}
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
数组名和首元素的地址
但有2个例外
1.sizeof(数组名) --数组名表示整个数组 --计算的是整个数组的大小,单位是字节
2.&数组名 --数组名表示整个数组 -- 取出的是整个数组的地址
int main()
{
int arr[10] = { 0 };
printf("%p\n", &arr[0]);
printf("%p\n", arr);
return 0;
}