指针运算

指针+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
最后修改:2023 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏