// once located at http://code.geeksforgeeks.org/QwkeeH

#include <stdio.h>
#include <stdlib.h>

int main() {
    // pointer arithmetic
    int A[] = {2, 3, 5, 7, 11} ;
    int *Ap = &A[2] ;
    printf("Ap[1] is %d\n", Ap[1]) ;
    int *Aq = &A[1] ;
    printf("Ap<Aq is %d\n", Ap<Aq) ;
    // exit(0) ;
    
    // array arithmetic
    int sum = 0 ;
    int i ;
    for (i=0; i<5; ++i) {
        sum = sum + A[i] ;
    }
    printf("normal sum is %d\n", sum) ;
    sum = 0 ;
    int *Ae = &A[5] ;
    int *Ai ;
    for (Ai=A; Ai<Ae; ++Ai) {
        sum = sum + *Ai ;
    }
    printf("pointer sum is %d\n", sum) ;
    // exit(0) ;
    
    printf("size of pointer is %ld\n", sizeof(void *)) ;
    printf("A    is %016lX\n", (long)(void *)A) ;
    printf("A[3] is %016lX\n", (long)(void *)&A[3]) ;
    printf("A[3] is %016lX\n", (long)(void *)A + 3*sizeof(int)) ;
    printf("main is %016lX\n", (long)&main) ;
    // exit(0) ;
    
    float exampleF = 45.67f ;
    printf("45.67 is %08X\n", * (int *)(void *)&exampleF) ;
    double exampleD = 0.1 ;
    printf(" 0.1  is %16lX\n", * (long *)(void *)&exampleD) ;
}
