2013-06-02 78 views
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 
+0

http://web.ics.purdue.edu/~cs240/misc/operators.html – kfsone

回答

4
value = *data_ptr++; 

此分配解除引用data_ptrvalue的結果,並然後遞增data_ptr。因此,數組的第一個元素是0,它將在value之間,而data_ptr將指向第二個元素。這是因爲++具有更高的優先級,因此它適用於data_ptr,而不是*data_ptr

value = *++data_ptr; 

該第一增量data_ptr(使其指向在陣列代替第二的第三個元素,在這種情況下),然後存儲解引用該結果(即,陣列的第三個元素,這也是0)value

value = ++*data_ptr; 

此存儲解引用data_ptr在(所述陣列的所述第三元件)+ 1(因此,1總的,因爲所有的數組的元素的是自動初始化在這種情況下爲0)的結果value

+0

謝謝你的回答。現在對我來說更清楚了。 –

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; 
+0

'// 1''more'value = * data_ptr; data_ptr + = 1;'... –

+0

一個post-增量操作員確實做了一個副本,但是兩者都起作用。 – jozefg

0

期待權對我來說。全局array[]初始化爲零。第一個value = *data_ptr獲得a [0]的值,然後遞增指針。下一行再次增加指針,所以得到一個[2]。最後一行得到一個[2],然後遞增值,給予1.

相關問題