Переопределить / изменить размер массива C в Objective C? - PullRequest
1 голос
/ 17 сентября 2010

У меня есть массив C в Objective C, определенный следующим образом:

id keysArray;

Затем в блоке if я хотел бы переопределить массив на основе условия:

if (somethingIsTrue){
    id keysArray[4][3];
}
else {
    id keysArray[6][1];
}

Затем, за пределами блока if, когда я получаю доступ к массиву, я получаю сообщения о том, что keysArray не существует.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Это потому, что когда вы покидаете область действия if, все локальные переменные, определенные в этой области, уничтожаются.Если вы хотите сделать это, вам придется использовать динамическое распределение.Я не знаю способ выполнения задач Objective C, но в обычном C вы должны использовать malloc.

1 голос
/ 17 сентября 2010

В C после создания массивы не могут изменять размер.Для этого вам нужны указатели и malloc() и друзья.

В C99 есть новая функциональность, называемая «массив переменной длины» ( VLA ), которая позволяет использовать массивы с определенной длинойво время выполнения (но фиксировано на время объекта)

while (1) {
    /* C99 only */
    int rows = 1 + rand() % 10; /* 1 to 10 */
    int cols = 1 + rand() % 10; /* 1 to 10 */
    {
       int array[rows][cols];
       /* use array, different sizes every time through the loop */
    }
}
...