数组的特点

  • 其中所有的元素具有相同的数据类型
  • 不能创建, 不能改变大小
  • 数组中的元素在内存中是连续依次排列的 🔗

数组的大小(单元数量)

使用 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