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_ptrされvalue、インクリメントされますdata_ptr。したがって、配列の最初の要素である 0 は にありvaluedata_ptr2 番目の要素を指します。これは、 ではなく に++適用されるように、 の優先順位が高いためです。data_ptr*data_ptr

value = *++data_ptr;

これは最初にインクリメントdata_ptrし (したがって、この場合は配列の 2 番目の要素ではなく 3 番目の要素を指す)、その逆参照の結果 (つまり、配列の 3 番目の要素で、これも 0) を に格納しvalueます。

value = ++*data_ptr;

これは、逆参照の結果data_ptr(配列の 3 番目の要素) + 1 (この場合、配列のすべての要素が自動的に 0 に初期化されるため、合計で 1) を に格納します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] の値を取得し、次にポインターをインクリメントします。次の行では、ポインターが再びインクリメントされるため、[2] が取得されます。最後の行は a[2] を取得し、値をインクリメントして 1 にします。

于 2013-06-02T04:10:34.230 に答える