2010-09-17 1 views
1

У меня есть массив С в Objective C определяется следующим образом:Переопределить/изменить размер массива C в Objective C?

id keysArray; 

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

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

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

Спасибо.

ответ

1

В 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 */ 
    } 
} 
2

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

+0

Цели C - то же, что и C здесь – Mark