C语言指针中的* p ++,* ++ p,++ * p有什么不同?

时间:2017-02-14 02:26:47

标签: c pointers

我正在学习c语言的基本知识。现在我对指针部分很困惑。 书中有一个原始问题:

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

ggplot(d, aes(balance, as.numeric(default) - 1)) + 
    geom_point() + 
    geom_smooth(method = 'glm', method.args = list(family = 'binomial')) + 
    scale_y_continuous('default', breaks = 0:1, labels = levels(d$default))

问题清单

  1. 执行a[0]:10 a[1]:20 <---p a[2]:30 a[3]:40 a[4]:50 之后*p的价值是什么?
  2. * p++的价值是什么?
  3. * ++p的价值是什么?
  4. 那么,++ * p*p++* ++p之间有什么不同?

    在我看来:

    1. ++*p表示将指针*p++指向下一个元素,因此第一个答案是30。
    2. p*p++的差异就像*++pi++的差异一样。所以第二个答案是30。
    3. ++i表示指针p的值,因此*p表示让++*p值增加1.所以第3个答案是21;
    4. 我是对的吗?

1 个答案:

答案 0 :(得分:2)

  

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

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

  

* ++ p的价值是什么?

考虑以下示例:

int array[] = {10, 20, 30};
int * p = array;

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

  

++ * p的价值是什么?

考虑以下示例:

int array[] = {10, 20, 30};
int * p = array;

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