数组

  1. 认识

存储同类型的数据

逻辑存储结构,物理存储结构

sizeof(a) == len*sizeof(BaseType)

  1. 定义

int a[10]

  • int a[n] //可以通过,但不建议使用
  • int a[11]:a[1]->a[10]
  1. 初始化

。。。

  • 静态数组和全局数组自动初始化为0,其他情况初始化为随机数
  1. 赋值

数组元素的赋值

a[]

memset(a,0,sizeof(a)) memset(a,-1,sizeof(a))

数组之间的赋值

b[] = a[]

memcpy(b,a,sizeof(int)*k)

  1. 数组元素的访问

二维数组

  1. 认识

扑克牌为例,数组的数组(a[0]就是一个数组)

逻辑存储结构,物理存储结构:按行存储

  1. 定义

int a[][5]

  • 按行存储=>必须要告知编译器是多少列,否则编译器不知道怎么存储二维数组
  1. 初始化

。。。

  • 静态数组和全局数组自动初始化为0,其他情况初始化为随机数
  1. 赋值
  2. 数组元素的访问

总结:

  1. 开辟在外面,更大
  2. 数组越界
  3. cin >> i >> a[i]

a就是数组,也就是地址,&a[0]

a就是二维数组,也就是地址,&a[0][0]

a[0]就是一维数组,也就是地址,&a[0][0]

a[1]就是一维数组,也就是地址,&a[1][0]


数组的地址:

  1. 数组名(梅园)
  2. 数组第一个元素的地址(第一栋楼)

a:数组的首地址

&a:数组的地址的地址

a[0]:数组的第一个元素

&a[0]:数组的第一个元素的地址,也就是数组的首地址

a:二维数组的名字,二维数组的首地址

&a:二维数组的地址的地址

a[0]:一维数组的名字,一维数组的首地址

&a[0]:一维数组的地址的地址

a[0][0]:一维数组的第一个元素

&a[0][0]:一维数组的第一个元素的地址,也就是一维数组的首地址

a[1]:一维数组的名字

&a[1]:地址的地址

a[1][0]:一维数组的第一个元素

&a[1][0]:一维数组的第一个元素的地址,也就是一维数组的首地址


函数

  1. 定义
  2. 参数

传一维数组:

int a[],int n

**int p,int n

传二维数组:

int a[][col],int n

int *a[col]

  1. 调用

指针

  1. 认识

两种思路:

直接使用变量

指针指向变量,间接使用变量

  1. 定义

int* p

  • int _p, _q
  1. 初始化和赋值

int *p = &a

  • *int p中的:表示p是一个指针变量
  • &:取地址运算符
  • *:解引用运算符
  • 位运算中的&:表示与运算
  • NULL表示空指针,不知道指向谁,就可赋值为NULL,NULL可以是一个不存在的地址

函数与指针