Arrays pointers on 32bit and 64bit systems
===

The following code prints different results on 32bit and 64bit systems:  

    #include <stdio.h>
    void swapArray(int **a, int **b) 
    { 
        int *temp = *a; 
        *a = *b; 
        *b = temp; 
    } 
     
    int main() 
    { 
        int a[2] = {1, 3}; 
        int b[2] = {2, 4}; 
        swapArray(&a, &b); 
        printf("%d\n", a[0]); 
        printf("%d\n", a[1]); 
        return 0; 
    }

After compiling it in 32bit system, the output is:  

    2
    3

On 64bit the output is:  

    2
    4

As I understand, the function `swapArray` just swaps the pointers to the first elements in `a` and `b`. So after calling `swapArray`, `a` should point to `2` and `b` should point to `1`.  
For this reason `a[0]` should yield `2`, and `a[1]` should reference the next byte in memory after the location of `2`, which contains `4`.

Can anyone please explain?