/* array2.c: Traverses an array with an index and a pointer */
#include <stdio.h>

main()
{
    int a[] = {0,1,2,3,4};
    int i, *p;
     size_t n = sizeof a / sizeof a[0];

    /* Print using array index */
    for (i = 0; i < n; ++i)
        printf("%d ",a[i]);
    putchar('\n');

    /* You can even swap a and i (but don't) */
    for (i = 0; i < n; ++i)
        printf("%d ",i[a]);
    putchar('\n');

    /* Print using a pointer */
    p = a;
    while (p < a+n)
        printf("%d ",*p++);
    putchar('\n');

    /* Using index notation with pointer is OK */
    for (p = a, i = 0; i < n; ++i)
        printf("%d ",p[i]);
    putchar('\n');

    /* Using pointer notation with array is OK */
    for (i = 0; i < n; ++i)
        printf("%d ",*(a+i));
    putchar('\n');

    /* Print backwards using pointer */
    p = a + n-1;
    while (p >= a)
        printf("%d ",*p--);
    putchar('\n');

    /* Negative subscripts are allowed */
    for (i = 0, p = a + n-1; i < n; ++i)
        printf("%d ",p[-i]);
    putchar('\n');
    return 0;
}

/* Output
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
4 3 2 1 0
4 3 2 1 0
*/

