2016-02-23 8 views
0

я следующий код:с использованием 'Экстерн' для целочисленных результатов массива в сбоем сегментации

file1.c

int arr[10]; 

file2.c

extern int *arr; 
int main() 
{ 
    arr[0] = 1; 
    return 0; 
} 

Пожалуйста, объясните мне, почему доступ к arr в файле2.c приведет к сбою сегментации?
компилятор: gcc ОС: Linux.

+1

extern int arr[10]; Может быть, есть причина, по которой первая одна называется «массив», в то время как второй называется «указатель»? – Olaf

+0

Вы не сказали компилятору правду, вы сказали, что есть переменная с именем 'arr', которая является указателем на int, но на самом деле это массив ints, который сильно отличается от указателя на int. – nos

+0

@Olaf: yes 'pointer' arr, указывающий на первый элемент массива. –

ответ

1

Причина ошибки:

Этот код приводит к сегментации вине

int * some_pointer; 
... 
some_pointer[0] = 1; 

Вы не поняли:

extern int *arr; это объявление указателя.

int arr[10]; - это объявление массива.

У них нет родственника в вашем случае.

Вам просто нужно в file2.c