Динамическое выделение массива структуры - PullRequest
0 голосов
/ 14 декабря 2011

У меня проблема с этим синтаксисом .
Проблема говорит:
вычисляет гистограмму вхождений имен, используя массив структур, динамически выделяемых во время выполнения
Я решил это таким образом (я предпочел использовать pastebin, чтобы не вставлять здесь слишком много кода):

main.cpp http://pastebin.com/TD6Y2Acf
dinalloc.cpp http://pastebin.com/93eM9EdL
dinalloc.h http://pastebin.com/bUX7TxTs

Это работает, но я не могу понять, почему ...
Я объявил структуру с именем hi и массив этих структур с именем vet. Когда в dinalloc.cpp я объявляю параметры функции, я должен написать hi *vet. Таким образом, это означает, что я говорю функции ожидать указатель на структуру hi, или нет? Вместо этого, когда я вызываю функцию, я даю vet в качестве параметра, то есть массив из hi структур.
Как возможно, что этот код работает?

P.S. Любые советы о моем методе написания кода приветствуются.

1 Ответ

2 голосов
/ 14 декабря 2011

Ваш код правильный.Фактически массив - это указатель на его первый элемент, и это то, что вы получили от своего нового оператора.

Даже если у вас был код, подобный

const int n = 5;
hi vet[n];
// ...
printHistogram(vet, n);

, он все еще корректен.Согласно пункту 4.2 стандарта c ++,

Значение l или значение типа «массив NT» или «массив неизвестной границы T» может быть преобразовано в значение типа «указатель на T».».Результатом является указатель на первый элемент массива.

...