file1.c
int a[3]={1,39,7}; /* definition */
file2.c
extern int a[]; /* declaration */
b = a[2]; /* correct usage in file2.c */
file3.c
extern int *a; /* another declaration */
c = a[1]; /* a[1] is *(a+1), fails! */
Использование в file2 получает третий элемент (7) из a, но
использование в file2 интерпретирует 39 как адрес (при условии 32
битовые целые числа и адреса), в результате чего либо мусор или
ошибка нарушения прав доступа, почему это так ...?