目录
1.数组
- 创建数组[]:里面需要常量 / 常量表达式
- 数组不完全初始化:剩下的默认元素是 0
- 创建字符数组:里面的数字被转化成ASCII码对应的字符
- 数组在内存中连续存放,且地址由低到高
- 未指定大小的数组,会根据内容初始化自动分配空间大小,所以sizeof都是确定的
分析:
sizeof计算的是所占空间大小,这里应该是6+1( ' \0' )个字节
strlen计算 \0 之前的字符串长度
分析:
这里未完全初始化,且没有给定数组大小。所以自动分配arr的空间是三个字节
所以sizeof的值是3
strlen只计算 \0 之前的字符串个数。这里不知道 \0 什么时候出现,所以是一个随机值
- strlen 和 sizeof 没有什么关联
- strlen 是计算字符串长度的,是库函数,返回值是一个无符号整型,需要头文件 string.h
- sizeof 计算目标所占空间大小,单位字节,是操作符,也是关键字
2.二维数组
- 二维数组的列不能省略
- 二维数组的打印,用二层循环遍历实现
- 二维数组在内存中也是连续存放的,本质中在内存中就是一维数组存放
- arr[0] 相当于第一行的数组名
3. 数组名
3.1 数组传参
- 数组名是数组首元素的地址
- 数组传参传递的数组,也就是首元素的地址,也就是个指针
![]()
两个例外:(除了这两个例外,以后看到所有的数组名都是首元素地址)
- sizeof(arr)----->数组名代表整个数组大小
- &arr-------->取出的是整个数组地址
3.2 冒泡排序 bubble_sort
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void bubble_sort(int arr[], int sz) // 算法实现
{
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
for (j = i+1; j < sz; j++)
{
if (arr[i] > arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
int main()
{
int arr[] = { 0,9,2,3,4,1,5,6,7,8 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz); // 冒泡排序
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
- 代码可以在优化,假如已经是有序的数组,不需要再排序
- 通过 flag 标志位实现