У меня есть простая функция 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++, если это имеет значение;
Править
О, еще одна вещь. Когда я использую прототип в качестве примера, я получаю предупреждение несоответствия спецификатора типа, (потому что я передаю изменяемую ссылку на массив константы?). Что я должен изменить для этого?
Вы хотите:
void Bar(const Foo *dataSet, int len);
Объявление параметра const Foo * x
означает:
x
- указатель наFoo
что я обещаю не менять.
С помощью этого прототипа вы сможете передать неконстантный указатель в Bar
.
Как и вы, функция принимает указатель на данные (const, если его не нужно изменять)
Затем либо передайте указатель, если вы назначили данные с помощью malloc или первый элемент, если это статический массив.