C语言指针中的*p++,*++p,++*p有什么区别?

Bin*_*Sun 1 c pointers

我正在学习c编程语言的基本知识。现在我对指针部分感到困惑。书中有原问题:

数组 a 有一些值,指针 p 现在位于 a[1]:

a[0]:10
a[1]:20  <---p
a[2]:30
a[3]:40
a[4]:50
Run Code Online (Sandbox Code Playgroud)

问题清单

  1. *p执行后的值是* p++什么?
  2. 的价值是* ++p什么?
  3. 的价值是++ * p什么?

那么,*p++, * ++p,之间有什么区别++*p

在我看来:

  1. *p++意味着移动指针p指向下一个元素,所以第一个答案是 30。
  2. 的差异*p++*++p一样的差异i++++i。所以第二个答案是 30。
  3. *p表示指针p的值,所以++*p表示让p值增加1。所以第三个答案是21;

我对吗?

VHS*_*VHS 5

执行 * p++ 后 *p 的值是多少?

*p++首先取消对指针 p 的引用,然后增加指针 p。所以下一次调用 *p 将返回 30。

* ++p 的值是多少?

考虑以下示例:

int array[] = {10, 20, 30};
int * p = array;
Run Code Online (Sandbox Code Playgroud)

在这种情况下, * ++p 将打印 20。首先指针将递增,这意味着它将开始指向第二个元素。然后它将被取消引用。

++ * p 的值是多少?

考虑以下示例:

int array[] = {10, 20, 30};
int * p = array;
Run Code Online (Sandbox Code Playgroud)

这里 ++ *p 将打印 11。首先指针将被取消引用返回 10,然后将增加 1 以返回 11。