数组的特点
- 其中所有的元素具有相同的数据类型
- 不能创建, 不能改变大小
- 数组中的元素在内存中是连续依次排列的 🔗
数组的大小(单元数量)
使用 sizeof() 整个数组占用字节数 单个数组元素占用字节数, 就是个数
int a[]={1,2,3,4};
sizeof(a)/sizeof(a[0])
数组作为函数参数时往往必须再用另一个参数传入数组的大小
- 数组作为函数的参数时:
- 不能在[]中给出数组的大小, 给了也没用
- 不能再利用sizeof来计算数组的元素个数!
至于为什么 ⇒ 指针与数组
数组不能直接赋值
因为数组变量名是一个常量指针 🔗
数组在算法中的应用
🤔n以内的素数
除了可以遍历, 还可以利用数组
- 将已验证的素数保存, 那么新数只要和已有素数除就可以了
- 立个 flag[n] 下标作为n个数, 元素值默认都为素数 那么每个素数的两倍都不是素数了, 把数组标0 最终把 值为1 的输出就好
集成初始化
一维
int a[] = {2,4,5,7,9};
方括号里没有数字, 会让编译器帮我们数开了几个
int a[3]={2}; // {2,0,0}
这里我们说好开了3个, 但是我却只给了一个, 那么第一个就是给定的 没有给定的就是0
因此我们可以:
int a[3]={0}; // {0,0,0}
用这种方法统一初始化为0 当然啦, 对于c++, 我们可以用memset 地址 初值 sizeof 地址来赋初值
集成初始化的定位
int a[5] = {
[0] = 2, [2] = 3, 6,
};
// {2, 0, 3, 6, 0}
int a[] = {
[0] = 2, [2] = 3, 6,
};
// {2, 0, 3, 6}
// 这里是帮忙数了
这里细节挺多的, 能用的都用了, 但是好像在c++不能这么写
二维
int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6},
}
我们有时候会看到, 第二重花括号没有的
这也是可疑的, 因为二维数组在计算机内存中跟一位数组一样, 可以理解为逐行填充
但为了人类读者理解. 还是写吧
二维数组
(课上设计内容不多)
检查行列
- 很简单, 就两层循环内外就好了
检查对角线
- 主对角线: i=j
- 副对角线由公式: j=n-i-1