指针之间的区别

时间:2013-06-02 04:05:23

标签: c pointers

int array[10];              
int main  (){
    int *data_ptr;
    int value;

    data_ptr = &array[0];

    value = *data_ptr++;        
    value = *++data_ptr;        
    value = ++*data_ptr;

   return 0;
}

每个作业之间的区别是什么?

如果我在每次赋值后打印,则返回

0

0

1

3 个答案:

答案 0 :(得分:4)

value = *data_ptr++;

这会将解除引用data_ptr的结果分配给value,然后递增data_ptr。因此,数组的第一个元素(0)将位于value中,data_ptr将指向第二个元素。这是因为++具有更高的优先级,因此它适用于data_ptr,而不是*data_ptr

value = *++data_ptr;

这第一个递增data_ptr(因此它指向数组的第三个元素而不是第二个元素,在这种情况下),然后存储解除引用的结果(即数组的第三个元素,在value中也是0)。

value = ++*data_ptr;

这将存储解除引用data_ptr(数组的第三个元素)+ 1的结果(因此,总共为1,因为在这种情况下,数组的所有元素都自动初始化为0) value

答案 1 :(得分:0)

以及

// Increment data_ptr and return the *original* value, then dereference that.
value = *data_ptr++;
// Increment data_ptr and return the new value, then dereference that
value = *++data_ptr;
// Dereference data_ptr then increment the result and return
// the newly incremented value.
value = ++*data_ptr;

为了清楚说明,这里写的是长手写的相同的东西

//1
data_ptr+=1;
int* prev = data_ptr - 1;
value = *prev;
//2
data_ptr += 1;
value = *data_ptr;
//3
value = *data_ptr;
value+=1;

答案 2 :(得分:0)

看起来对我来说。全局array[]初始化为零。第一个value = *data_ptr获取a [0]的值,然后递增指针。下一行再次递增指针,因此获得[2]。最后一行获得[2],然后递增该值,得到1。