2012-02-09 5 views
-5

Каков правильный способ определения массива в c? Следующая конструкция не работает, компилятор выдает ошибку «Ожидаемое выражение»:c - Каков правильный способ определения массива?

#include <iostream> 
#include <unistd.h> 

#define Lookup[9][] = {"00", "01", "02", "03", "04", "05", "06", "07", "08"} 
+3

Ваш пример на C++, а не на простом ... – gavenkoa

+6

Ugh! Не указывайте данные '# define'! – pmg

ответ

2

правильный способ определить и инициализировать массив является

char Lookup[][3] = {"00", "01", "02", "03", "04", "05", "06", "07", "08"}; 

Каждый элемент массива Lookup сама другой массив из 3 байтов. Подсчитывая нулевым терминатором, достаточно места для строк длиной 2 символа.

Количество элементов в массиве доступно с выражением sizeof Lookup/sizeof *Lookup, как в

int k; 
for (k = 0; k < sizeof Lookup/sizeof *Lookup; k++) { 
    printf("element at index %d: %s\n", k, Lookup[k]); 
} 
+0

Есть ли способ избавиться от нулевого терминатора? –

+0

(Мне нужно сделать таблицу поиска для очень быстрого алгоритма, а с нулевым терминатором будет сложнее и медленнее) –

+1

Если вы определяете самые внутренние массивы всего за 2 байта, результирующие элементы больше не являются строками, но это возможно , Не являясь строками, я хотел бы сделать это несколько яснее, используя 'unsigned char' (или' signed char'), а не простой 'char':' unsigned char Lookup [] [2] = {«00», «01», «02», «03», «04», «05», «06», «07», «08»}; '. ** Помните, что элементы больше не являются строками **. Использование ''% s '' в 'printf' является ошибкой (как и использование многих функций в' '). – pmg

2

Для того, чтобы определить массив int, например:

int int_array[10]; 

Для того, чтобы определить и инициализировать массив от int:

int int_array[] = { 1, 2, 3, 4, 5 }; 

Указание количества элементов является необязательным, если вы инициализируете массив.