Как я могу передать константный массив или массив переменных в функцию в C? - PullRequest
6 голосов
/ 15 июня 2010

У меня есть простая функция Bar, которая использует набор значений из набора данных, который передается в виде массива структур данных.Данные могут поступать из двух источников: постоянный инициализированный массив значений по умолчанию или динамически обновляемый кэш.

Вызывающая функция определяет, какие данные используются и должны быть переданы в Bar.Bar не нужно редактировать какие-либо данные и фактически никогда не должно делать этого.Как мне объявить параметр данных Bar, чтобы я мог предоставить данные из любого набора?

union Foo
{
long _long;
int _int;
}

static const Foo DEFAULTS[8] = {1,10,100,1000,10000,100000,1000000,10000000};
static Foo Cache[8] = {0};

void Bar(Foo* dataSet, int len);//example function prototype

Обратите внимание, это C, а не C ++, если это имеет значение;

Редактировать
О, еще одна вещь.Когда я использую прототип примера, я получаю предупреждение о несоответствии квалификатора типа (потому что я передаю непостоянную ссылку на константный массив?).Что я должен изменить для этого?

Ответы [ 2 ]

9 голосов
/ 15 июня 2010

Вы хотите:

void Bar(const Foo *dataSet, int len);

Объявление параметра const Foo *x означает:

x - указатель на Foo, который я обещаю не изменять.

Вы сможете передать неконстантный указатель в Bar с этим прототипом.

0 голосов
/ 15 июня 2010

Как вы уже сделали - функция получает указатель на данные (const, если не нужно их изменять)

Затем либо передайте указатель, если вы разместили данные с помощью malloc, либо первый элемент, если это статический массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...