Comment on page
Pre/Post Increment Operator
int arr[] = {10, 20, 30, 40, 50, 60};
int* ptr = arr;
*(ptr++) += -1; // 9, 20, 30, 40, 50, 60
*(++ptr) += -2; // 9, 20, 28, 40, 50, 60
ptr += 2;
*ptr += -3;// 9, 20, 28, 40, 47, 60
9, 20, 28, 40, 47, 60
#include <stdio.h>
int main(){
int arr[] = {10, 20, 30, 40, 50, 60};
int* ptr = arr;
*(ptr++) += -1; // 9, 20, 30, 40, 50, 60
*(++ptr) += -2; // 20, 20, 28, 40, 50, 60
ptr += 2;
*ptr += -3;// 20, 20, 40, 40, 47, 60
for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){
printf("arr[%d] = %d \n", i, arr[i]);
}
return 0;
}
ptr V
arr[] = {10, 20, 30, 40, 50, 60};
++在 ptr 後面, 他會先賦值再移動指標
Step 1. *ptr --> 10
Step 2. *ptr = *ptr + (-1) --> arr[0] = 9
Step 3. ptr++ --> this pointer has shifted to arr[1]
++在 ptr 前面, 他會先移動再賦值
Step 1. ++ptr --> this pointer has shifted to arr[2]
Step 2. *(++ptr) == arr[2] = 30
Step 3. *(++ptr) = *(++ptr) + (-2) --> arr[2] = arr[2] -2
--> arr[2] = 28
ptr += 2 --> this pointer has shifted to arr[4]
*ptr += -3 --> arr[4] = arr[4] -3
--> arr[4] = 47
(1)
a = ptr++
ptr的值先給 a, ptr再加 1
a = ++ptr
ptr先加 1, ptr的值再傳給 a
(2)
*(ptr++)
++在 ptr 後面, 他會先賦值再移動指標
*(++ptr)
++在 ptr 前面, 他會先移動再賦值