一、快速一览
*a++
- 先解引用,后指针自增
- 改变指针指向,指向自增后的地址
*++a
- 先指针自增,后解引用
- 改变指针指向,指向自增后的地址
(*a)++
++(*a)
二、详解
1. 运算符(*、++/–)
1.1 解引用运算符 (*)
*操作符一般用于两个场景,分别为定义指针变量,或者获取指针所指位置的值。
#include <stdio.h>
int main() {
int x = 1;
int* p = &x;
printf("%d", *p);
return 0;
}
1.2 自增/自减运算符 (++/–)
++和--操作符有两种使用形式,分别为前置和后置使用。前置使用会先修改值后使用值,后置使用会先使用值后修改值。
此为一般理解,具体逻辑需要考虑运算符的结合方向
在本文问题中,要注意++运算符所结合的对象,判断对象是指针还是所指向的值
#include <stdio.h>
int main(){
int a = 1, b = 1;
int x1 = a ++ ;
int x2 = ++ b;
printf("%d %d %d %d\n", a, b, x1, x2);
}
2. 代码演示
在本文中,将结合代码来解释这四条语句,首先定义了a为指向arr数组的1号下标的指针。
2.1 参数定义
#include <stdio.h>
int main() {
int arr[] = { 1, 3, 5 };
int* a = arr + 1;
printf("addr(arr) = %x\na = %x\n*a = %d\n", arr, a, *a);
return 0;
}
2.2 代码注释
#include <stdio.h>
int main() {
int arr[] = { 1, 3, 5 };
int* a = arr + 1;
*a++ = 2;
for (int i = 0; i < 3; i++) {
printf("%d ", arr[i]);
}
printf("\n%d\n", *a);
return 0;
}
*++a = 2;
int b = (*a)++;
int b = ++(*a);
2.3 使用场景
- 在底层编程,如嵌入式、驱动开发等,直接操作指针和内存能有效提高程序效率
while(cnt){
*pArr++ = x;
cnt -- ;
}