Память распределяется одинаково для ваших трех переменных. Разница в том, как компилятор обрабатывает их. Так как b
и c
объявлены с const
, компилятор будет вас раздражать, если вы попытаетесь изменить их значения. Поскольку c
определено static
, оно не будет доступно за пределами текущего файла (к a
и b
можно получить доступ с помощью extern
).
Память для всех трех из них будет выделена внутри исполняемого файла без каких-либо оптимизаций (иногда компилятор может устранить необходимость выделять память для констант, заполняя значение константы везде, где на нее ссылаются).
Ваш вызов функции будет работать для a
, но не для b
или c
без явного приведения (так как ваша функция ожидает указатель на не const
int
). Тем не менее, ваш компилятор должен вас огорчить, если вы попытаетесь привести значение const
к значению, отличному от const
.