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
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
value = *data_ptr++;
此分配解除引用data_ptr
到value
的結果,並然後遞增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
。
謝謝你的回答。現在對我來說更清楚了。 –
以及
// 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;
'// 1''more'value = * data_ptr; data_ptr + = 1;'... –
一個post-增量操作員確實做了一個副本,但是兩者都起作用。 – jozefg
期待權對我來說。全局array[]
初始化爲零。第一個value = *data_ptr
獲得a [0]的值,然後遞增指針。下一行再次增加指針,所以得到一個[2]。最後一行得到一個[2],然後遞增值,給予1.
http://web.ics.purdue.edu/~cs240/misc/operators.html – kfsone