指针运算
指针+1的含义
- 给一个指针加1表示要让这个指针指向下一个单元的变量
int a[10];
int *p = a;
*p -> a[0];
*(p+a) -> a[1];
- 如果指针不是指向一片连续分配的空间(如数组),则这种运算没有意义。
指针可用的运算符
- 给指针加减一个整数 (+ , += , - , -=)
- 递增递减 (++ , --)
- 两个指针相减(返回两个指针之间的距离)
int a[] = {5,4,3,2,1};
int *p1 = &a[1];
int *p2 = &a[4];
printf("%d\n",p2-p1); // 输出结果:3
指针的大小比较
- 两个指针可以比较大小
- 只有在两个指针指向同一数组时比较才有意义
- 比较结果依赖于指针在数组中的相对位置
int a[] = {1,0};
int *p = &a[0];
int *q = &a[1];
printf("%d",p>q); //输出0
printf("%d",*p>*q); //输出1
指向符合字面量的指针
int *p = (int []){0,1,2,3,5};
C99特性,可以减少一些麻烦。不用声明一个数组,再用指针指向这个数组的第一位。
指针用于数据处理
*和++运算符的组合
++ 优先级大于 *
表达式 | 含义 |
---|---|
p++ 或 (p++) | 自增前*表达式的值是p**,然后自增p |
(*p)** | 自增前*表达式的值时p*,然后自增\p |
*++p或者*(++p) | 先自增p,自增后表达式的值仍是*p |
++*p或者++(*p) | 先自增*p,自增后表达式的值仍是*p |