4
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
4

3 回答 3

4
value = *data_ptr++;

这会将取消引用的结果分配data_ptrvalue,然后递增data_ptr。所以数组的第一个元素,即 0,将在 中valuedata_ptr并将指向第二个元素。这是因为++具有更高的优先级,因此它适用于data_ptr,而不适用于*data_ptr

value = *++data_ptr;

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

value = ++*data_ptr;

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

于 2013-06-02T04:11:38.207 回答
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;
于 2013-06-02T04:10:00.757 回答
0

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

于 2013-06-02T04:10:34.230 回答