##### 指针操作表达式
- 指针操作表达式
- **指针操作表达式**主要涉及两个[[C.一元运算符|一元运算符]]分别是[[C.指针|指针]]的取地址运算符 `&` 和解引用运算符 `*` . 其中, `&` 用来获取一个变量的地址, 而 `*` 用来访问指针指向的地址处存储的值. 初次之外还支持多种运算包括算术, 关系, 逻辑等用于元素访问, 例如算数运算表示将指针偏移指定的元素数量
- 示例
```c
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5}; // 一个整型数组
int *p = arr; // 指针 p 指向数组 arr 的第一个元素
// 指针算术运算
printf("p points to: %d\n", *p); // 输出 p 指向的值 (1)
p++; // 指针加一,指向数组中的下一个元素
printf("After p++, p points to: %d\n", *p); // 输出 p 指向的值 (2)
p--; // 指针减一,指向数组中的上一个元素
printf("After p--, p points to: %d\n", *p); // 输出 p 指向的值 (1) int *q = &arr[4]; // 指针 q 指向数组的最后一个元素
printf("q points to: %d\n", *q); // 输出 q 指向的值 (5)
// 指针差值运算
printf("Difference between p and q: %lld\n", q - p); // 输出指针差值,即 q 和 p 之间的元素个数 (4)
// 指针关系运算
if (p < q) {
printf("p is less than q\n"); // 判断 p 是否在 q 之前
}
if (q > p) {
printf("q is greater than p\n"); // 判断 q 是否在 p 之后
}
// 指针和整数的运算
p = p + 2; // 指针加上整数,指向数组中的第3个元素
printf("After p + 2, p points to: %d\n", *p); // 输出 p 指向的值 (3)
p = p - 1; // 指针减去整数,指向数组中的第2个元素
printf("After p - 1, p points to: %d\n", *p); // 输出 p 指向的值 (2)
// 指针与常量的运算
p = arr + 3; // 将指针 p 指向数组的第4个元素
printf("p points to: %d\n", *p); // 输出 p 指向的值 (4)
return 0;
}
```