3.7 数组指针
1.数组指针的概述
**数组指针是一个指向数组的指针变量,是用来保存数组元素的地址。**在C/C++中,数组名代表了数组的首地址,可以被解释为一个指向数组第一个元素的指针。因此,一个指向数组的指针可以通过数组名来获得。
例如: int arr[5]={10,20,30,40,50};
//需求定义一个指针变量 保存 数组元素的地址
int *ptr;
ptr = &arr[0];
ptr = arr; //arr作为地址 第0个元素的地址 arr==&arr[0]
ptr = &arr[3]; //也可以保存第三个元素的地址
可以使用数组名arr
来获取数组的首地址。然后,可以声明一个指向该数组的指针变量来保存这个地址:
int *ptr = arr; // 等价于 int *ptr = &arr[0];
在上述代码中,ptr
是一个指向整型的指针变量,通过将数组名arr
赋值给ptr
,ptr
指向了数组arr
的首元素,即arr[0]
。
通过指针操作符*
和索引,我们可以访问数组的元素。例如,要访问数组的第三个元素,可以使用以下语法:
int value = *(ptr + 2); // 等价于 int value = arr[2];
在这里,ptr + 2
将指针移动了两个长度为sizeof(int)
的单位,即指向了数组的第三个元素。然后,通过解引用操作符*
,我们可以获取该元素的值。
2 数组元素的指针变量 和数组名(作为地址)等价
数组指针还可以用于传递数组给函数。在函数参数中,可以将数组声明为指针或使用指针作为参数类型来接收数组。这是因为数组名会自动转换为指向数组首元素的指针。
3 在使用中 [ ] 就是*()的缩写
为啥 arr ==&arr[0]?
&arr[0] == &*(arr+0) == arr+0 == arr
案例1: p[-1]的值是 30 p[-1] 实际是代表 *(p - 1)
int arr[5] = (10,20,30,40,50}; //*p指向的是40的位置
int *p = arr+3;
案例2: p[1]的值是 50 p[1] 实际是代表 *(p + 1)
int arr[5] = (10,20,30,40,50};//*p指向的是40的位置
int *p = arr+3;
4 指向同一数组元素的两个
int arr(5) = {10, 20,30,40,50}; int *p1 = arr; int *p2 = arr+4;
1、两指针变量相减,等于它们间的元素个数
2、两指针变量赋值= p2=p1 它们指向同一处
3、两指针变量判断相等 == p2==p1 它们是否指向同一处
4、两指针变量判断大小 > < >= <= !=
p1>p2 p1!=p2 判断它们的位置关系
5、两指针变量不能相加(!) p1+p2无意义