As far as I've understood this far array[1] and array+1 are practically two ways of writing the same thing. However I've been looking at void pointers and arrays recently and made this program to test my understanding of it.
#include <stdio.h>
#include <stdlib.h>
int main(void){
    void** data;
    data = malloc(sizeof(int)*2);
    *((int*)data) = 5;
    *((int*)(data+1)) = 10;
    printf("%d\n", *((int*)data));
    printf("%d\n", *((int*)(data+1)));
    free(data);
    return 0;
}
That is the version of the program that works, for some reason however this version doesn't
#include <stdio.h>
#include <stdlib.h>
int main(void){
    void** data;
    data = malloc(sizeof(int)*2);
    *((int*)data[0]) = 5;
    *((int*)data[1]) = 10;
    printf("%d\n", *((int*)data));
    printf("%d\n", *((int*)data1]));
    free(data);
    return 0;
}
I'm not exactly getting compiler errors but program simply stops running, I've compiled this on a win 10 machine using gcc with the following flags -pedantic-errors -Wall and like i said before, the program compiles but when run I get the classic Program.exe has stopped working error message and so far I really can't think of a single reason why one of those would work and the other wouldn't.
 
     
     
    