На самом деле, из вашего исходного кода:
int *top;
int a=1;
top=&a;
Как уже упоминали другие - в глобальном пространстве вы можете объявить или объявить и инициализировать.Вы не можете выполнять присваивание.
Что действительно происходит в строке top = &a;
, так это то, что вы на самом деле повторно объявляете переменную с именем top
, и по умолчанию используется тип int
.Фактически, компилятор должен предупредить о создании новой переменной с именем top
, имя которой совпадает с именем ранее объявленной переменной, а также сгенерировать дополнительное предупреждение о создании переменной по умолчанию типа int
.
В C переменные, которые объявлены без типа по умолчанию, равны int
, и это приведет к появившейся ошибке.
ошибка C2440: «инициализация»: невозможно преобразовать из'int *' to 'int'
На что это действительно жалуется, так это то, что top = &a;
, как в вашем коде на самом деле выглядит как int top = &a;
для компилятора, поэтому вы пытаетесь связать int*
до int
.