1.通过指针引用数组
1.数组元素的指针
数组指针:数组中的第一个元素的地址,也就是数组的首地址。
指针数组:用来存放数组元素地址的数组,称之为指针数组。
注意:虽然我们定义了一个指针变量接收了数组地址,但不能理解为指针变量指向了数组,而应该理解为指向了数组的元素。
2.指针运算
指针运算:指针变量必须要指向数组的某个元素。
元素 | 指针运算 | 说明 |
1 | 自增:p++,++p,p=p+1,p+=1 |
让指针变量指向下一个元素
|
2 | 自减:p--,--p,p-=1 |
让指针变量指向上一个元素
|
3 | 加一个数:p+1 |
下一个元素的
(
首
)
地址
|
4 | 减一个数:p-1 |
上一个元素的
(
首
)
地址
|
5 | 指针相减:p1-p2 |
p1,p2
之间相差几个元素
|
6 | 指针比较:p1<p2 |
前面的指针小于后面的指针
|
3.数组名做函数
表现形式:
1.
形参和实参都用数组名
2.
实参用数组名,形参用指针变量
3.
实参形参都用指针变量
4.
实参为指针变量,形参为数组名
4.数组指针
数组指针:指向一维数组的指针变量。
数组指针定义:假定该指针变量指向具有
N个元素的一维数组,则数组指针变量定义如下:
数据类型
(
*
数组指针变量名
)[
N
];
一维数组:
int
a
[
N
]
=
{
1
,
2
,
3
};
int
(
*
p
)[
N
]
= &
a
;
二维数组:
int
a
[][
N
]
=
{
1
,
3
,
5
,
7
};
int
(
*
p
)[
N
]
=
a
[
0
];
// &a[0][0]
5.函数的传参
值传递:一般发生在函数形参的类型为char
、
short
、
int
、
long
、
float
、
double
这样的类型,它的传递,一般是实参将自己的值复制一份给形参,也就是实参变量和形参变量的变量空间是分开的。此时形参无法改变实参的数据。
引用传递:一般发生在函数形参的类型为数组、指针这样的类型,它的传递,一般是实参将自己的内存首地址复制一份给形参,也就是实参变量和形参变量对应内存空间是同一个。此时形参可以改变实参的数据。