数组
- 认识
存储同类型的数据
逻辑存储结构,物理存储结构
sizeof(a) == len*sizeof(BaseType)
- 定义
int a[10]
- int a[n] //可以通过,但不建议使用
- int a[11]:a[1]->a[10]
- 初始化
。。。
- 静态数组和全局数组自动初始化为0,其他情况初始化为随机数
- 赋值
数组元素的赋值
a[]
memset(a,0,sizeof(a)) memset(a,-1,sizeof(a))
数组之间的赋值
b[] = a[]
memcpy(b,a,sizeof(int)*k)
- 数组元素的访问
二维数组
- 认识
扑克牌为例,数组的数组(a[0]就是一个数组)
逻辑存储结构,物理存储结构:按行存储
- 定义
int a[][5]
- 按行存储=>必须要告知编译器是多少列,否则编译器不知道怎么存储二维数组
- 初始化
。。。
- 静态数组和全局数组自动初始化为0,其他情况初始化为随机数
- 赋值
- 数组元素的访问
总结:
- 开辟在外面,更大
- 数组越界
- cin >> i >> a[i]
a就是数组,也就是地址,&a[0]
a就是二维数组,也就是地址,&a[0][0]
a[0]就是一维数组,也就是地址,&a[0][0]
a[1]就是一维数组,也就是地址,&a[1][0]
数组的地址:
- 数组名(梅园)
- 数组第一个元素的地址(第一栋楼)
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]:一维数组的第一个元素的地址,也就是一维数组的首地址
函数
- 定义
- 参数
传一维数组:
int a[],int n
**int p,int n
传二维数组:
int a[][col],int n
int *a[col]
- 调用
指针
- 认识
两种思路:
直接使用变量
指针指向变量,间接使用变量
- 定义
int* p
- int _p, _q
- 初始化和赋值
int *p = &a
- *int p中的:表示p是一个指针变量
- &:取地址运算符
- *:解引用运算符
- 位运算中的&:表示与运算
- NULL表示空指针,不知道指向谁,就可赋值为NULL,NULL可以是一个不存在的地址
