2016-01-03 8 views
3

Предположим, что у нас есть 2 файлаЭкстерн используя указатель вместо массива

1) file1.c

int Appples[10]; 

2) file2.c

extern int *Appples; 

Есть ли Проб с этим типом за исключением того, что мне придется обрабатывать размер самостоятельно?

+0

Почему не 'Экстерн Int яблок [10];'? – Mahesh

+0

@Mahesh, действительно ли это влияет на поведение? – Alex

+0

Да, одна проблема: это неверно. Не делай этого. –

ответ

5

Это описано в C FAQs 6.1

Тип указатель на тип-Т не такой же, как массив из типа-T. Используйте extern char a [].

this answer решает проблему более конкретно. Конечная точка: массив не является указателем, и вы не должны рассматривать его как таковой.

1

Когда вы объявляете переменную как:

extern int *Appples; 

она должна быть определена как:

int *Appples = <initializer>; 

не как:

int Appples[10]; 

Если вы хотите определить с помощью:

int Appples[10]; 

Он может быть объявлен как:

extern int Appples[10]; 

или

extern int Appples[];