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
答案 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。