int const массив не может быть записан в - PullRequest
2 голосов
/ 13 января 2020

Компиляция следующей программы

int main(void) {
    int const c[2];
    c[0] = 0;
    c[1] = 1;
}

приводит к ошибке: назначение места только для чтения 'c [0]'. Насколько я понимаю, const относится только к расположению c, поэтому c [0] и c [1] должны быть изменяемыми. Почему выдается эта ошибка?

1 Ответ

8 голосов
/ 13 января 2020

Насколько я понимаю, const относится только к расположению c

Нет. Вы не можете изменить расположение массива в любом случае. Что вы, вероятно, имеете в виду, если у вас есть int * const, то это действительно постоянный указатель на модифицируемую int. Однако int const c[2]; - это массив из 2 константных целых. Таким образом, вы должны инициализировать их при объявлении массива:

int const c[2] = {0, 1};

Instst:

int main(void) {
    int c[2];
    int* const foo = c;
    foo[0] = 0;
    foo[0] = 1;
    //foo = malloc(sizeof(int)); doesn't work, can't modify foo, as it's constant
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...