通过指针引用数组
数组元素的指针
- 数组指针:数组中的第一个元素的地址,也就是数组的首地址。
- 指针数组:用来存放数组元素地址的数组,称之为指针数组。
// 定义一个一般数组
int a[] = {
1,4,9};
// 使用指针变量存储数组的第一个元素的首地址,也就是数组的首地址
int *p = &a[0];// 数组首地址
// 在C语言中,由于数组名代表数组的首地址,因此,数组名实际上也是指针。
int *p = a;
// 意味着:int *p = &a[0] 完全等价于 int *p = a;
printf("%d\n",*p); // 1
注意:虽然我们定义了一个指针变量接收了数组地址,但不能理解为指针变量指向了数组,而应该理解为指向了数组的元素。
指针的运算
指针运算:指针变量必须要指向数组的某个元素。
序号 | 指针运算 | 说明 |
---|---|---|
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 | 前面的指针小于后面的指针 |
案例1:
#include <stdio.h>
int main()
{
// 一般数组
int a[] = {
1,3,5,7,9};
// 计算数组中元素的个数
// sizeof用法:sizeof(运算数) 或者 sizeof 运算数
int len = sizeof a / sizeof a[0];
// 创建指针变量
int *p = a;
// 创建循环变量
register int i = 0;
// 遍历
for(;i < len; i++)
{
printf("[1] %d ",a[i]); // 下标法
printf("[2] %d ",*(a+i));// 指针法,但是这种写法,需要注意,a+i无法修改数组,只读
printf("[3] %d ",*(p+i));// 指针法,这种更为灵活,可读可写,建议这种写法
// printf("%d\n",*p); // 等价于上面写法
// p++;
}
printf("\n");
return 0;
}
案例2: