*p++、*(p++)、(*p)++、*++p、++*p的区别

1. 后缀++ 和 --   大于   前缀 ++ 和 --   大于  *

2. 后缀是先使用后加加,后缀是先加加后使用

*p++

	int arr[] = { 1,4,7,9,10 };
	int* p = arr;
	printf("原*p的值: %d\n", *p);  // 1
	/// 后置++的优先级高于*,即 先p++ 后*p  但是后置++ 是先使用后++
	/// 所以先使用 p 此时p为首元素地址 解引用p得到 1 赋给 a ,p使用完后++, p为第二个元素地址
	int a = *p++; 
	printf("a = %d, *p = %d\n", a, *p); // 1  4

*(p++)

	int arr[] = { 1,4,7,9,10 };
	int* p = arr;
	printf("原*p的值: %d\n", *p);  // 1
	/// 和前面一样先 p++ 后 *p 但是后置++ 是先使用后++
	int b = *(p++);
	printf("b = %d: *p = %d\n", b, *p); // 1 4

(*p)++ 

	int arr[] = { 1,4,7,9,10 };
	int* p = arr;
	printf("原*p的值: %d\n", *p);  // 1
	// 括号的优先级高于 后置++,所以先 *p 后++
	// 后置++ 是先使用后++,*p 得到值 1 先使用赋给 c 然后++, *p变为 2,则arr[0]也变为2
	int c = (*p)++;
	printf("c = %d: *p = %d\n", c, *p); // 1 2

*++p 

	int arr[] = { 1,4,7,9,10 };
	int* p = arr;
	// 前置++的优先级高于*,先++p 后 *p
	// 与第一个不同的是  前置++ 是 先++ 后使用
	// 所以 p加加后指向arr第二个元素,即p存放第二个元素地址,解引用得到 4 赋给 d
	int d = *++p;
	printf("d: %d   *p = %d\n", d, *p); // 4  4

 ++*p

	int arr[] = { 1,4,7,9,10 };
	int* p = arr;
	int e = ++ * p;  // 等价于 ++(*p)
	printf("e = %d  *p = %d\n", e, *p); // 2 2

你可能感兴趣的:(c/c++,c语言)