第十章 - DDL-Killer/The-road-of-Linxu-Group2024 GitHub Wiki

数组

初始化

int main(void)
{
int power[8] = {1,2,3,4,5,64};
}

  • 用逗号分隔的值列表来初始化数组,各值之间用逗号分隔
  • 有时需要把数组设置为只读,使用const
  • 使用数组前必须先初始化
  • 如果初始化数组时省略方括号的数字,编译器会根据初始化列表中的项数来确定数组的大小
  • sizeof运算符来计算它的运算对象的大小(以字节为单位),整个数组的大小除以单个元素的大小就是数组元素的个数

给数组元素赋值

  • 声明数组后,可以借助数组下标(或索引)给数组元素赋值

数组边界

  • 编译器不会检查数组下标是否得当,在c语言中,使用越界下标的结果是未定位的

指定数组的大小

多维数组

  • 多维数组是数组的数组

指针和数组

  • 数组名是数组首元素的地址
  • 在我们的系统中,地址按字节编址,在C中,指针加1指的是增加一个存储单元,所以必须声明指针所指向对象类型的原因之一
  • 指针的值是它所指向对象的地址,许多计算机按字节编译,内存中的每个字节都按顺序编号,一个较大对象的地址通常是该对象第一个字节的地址
  • 在指针前面使用*运算符可以得到该指针所指向对象的值
  • 指针加1,指针的值递增它所指向类型的大小(以字节为单位)

函数、数组和指针

  • 声明数组形参:
    数组名是该数组首元素的地址,作为实际参数的数组名要求形式参数是一个与之匹配的指针

使用指针形参

  • 函数要处理数组必须知道何时开始、何时结束
    1. 用一个指针形参标识数组的开始,用一个整数形参表明待处理的元素个数
    2. 传递两个指针,第一个指针指明数组的开始处,第二个指针指明数组的结束处

指针表示法和数组表示法

C语言,ar[i]和*(ar+i)表达式是等价的

指针操作

  1. 赋值:可以把地址赋给指针
  2. 解引用:*运算符给出指针指向地址上存储的值
  3. 取址:指针变量也有自己的地址和值,对指针而言,&运算符给出指针本身的地址
  4. 指针与整数相加:可以使用+运算符把指针与整数相加,或反过来,无论哪种情况,整数都会和指针所指向类型的大小(以字节为单位)相乘,然后把结果与初始地址相加
  5. 递增指针:递增指向数组元素的指针可以让该指针移动至数组的下一个元素
  6. 指针减去一个整数:类似相加
  7. 递减指针:类似递增
  8. 指针求差:差值是两个元素之间的距离
  9. 比较:比较两个指针的值
  • 千万不要解引用未初始化的指针

保护数组中的数据

对形式参数使用const

  1. 在数据类型之前的,可以更换同数据类型的指针
  2. 在数据类型之后的,可以修改值,不能更换指向对象

指针和多维数组

  • 声明一个指向N维数组的指针时,只能省略最左边方括号中的值

变长数组

  • 变长数组必须是自动存储的类别,不能用static或extern

关键概念

  • 数组用于储存相同类型的数据
  • 对于传统的C数组,必须用常量表达式指明数组的大小,数组大小在编译时就已经确定
  • 变长数组可以用变量表示数组的大小