|
Consider the following for-loop that sum all the array elements:
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; s = 0; for (int i = 0; i < 10; i++) { s = s + B[i]; } printf("sum = %d\n", s); } |
We define a reference variable of the suitable data type to point to the array B[ ]:
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; s = 0; for (int i = 0; i < 10; i++) { s = s + B[i]; } printf("sum = %d\n", s); } |
When p points to array B[ ], the p[i] is an alias for B[i]:
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; p = B; s = 0; for (int i = 0; i < 10; i++) { s = s + p[i]; // p[i] ≡ B[i] } printf("sum = %d\n", s); } |
We re-write p[i] back to *(p+i):
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; p = B; s = 0; for (int i = 0; i < 10; i++) { s = s + *(p+i); // *(p+i) ≡ p[i] ≡ B[i] } printf("sum = %d\n", s); } |
Instead of adding i to p, we can increment p in a piecemeal manner:
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; p = B; s = 0; for (int i = 0; i < 10; i++) { s = s + *p; p = p + 1; // Make p point to the next array element } printf("sum = %d\n", s); } |
Use the post-increment ++ operator to simplify the 2 statements:
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; p = B; s = 0; for (int i = 0; i < 10; i++) { s = s + *(p++); } printf("sum = %d\n", s); } |
Because post-increment ++ has higher priority (see click here) we can drop the bracket ( ):
#include <stdio.h> int main(int argc, char *argv[]) { int B[10] = {1, 3, 5, 7, 9, 1, 1, 2, 1, 2}; int s; int *p; p = B; s = 0; for (int i = 0; i < 10; i++) { s = s + *p++; } printf("sum = %d\n", s); } |