как правильно передать массив в функцию?

369
20 февраля 2017, 17:47

Почему в функцию передается TCHAR(&name)[100], а не TCHAR *name?

void  CreateName(TCHAR(&name)[100], int number)
{
_stprintf_s(name, TEXT("Your number: %d"), number);
}
Answer 1

В документации Майкрософт функция _stprintf_s является макроопределением следующего вида

#define _stprintf_s swprintf_s

В свою очередь функция swprintf_s определяется как

template <size_t size>  
int swprintf_s(  
   wchar_t (&buffer)[size],  
   const wchar_t *format,  
   ...  
); // C++ only  

То есть это шаблонная функция шаблонным параметром которой является размер массива. Поэтому массив, используемый в качестве аргумента передается функции по ссылке, чтобы функция могла определить размер массива.

Соответственно и функция CreateName объявляется свой первый параметр как ссылку на массив, который она далее передает в функцию _stprintf_s. Если бы она не принимала массив по ссылке, то не смогла бы вызвать функцию _stprintf_s.

Для вызова функции CreateName нужно просто указать имя массива в качестве аргумента, как это делает в свою очередь сама функция при вызове функции _stprintf_s.

READ ALSO
Как запустить сервис на Android при помощи Qt?

Как запустить сервис на Android при помощи Qt?

Пытаюсь написать сервис который будет кликать по экрануДелаю это так:

507
Наполнения списка возможных Command Arguments

Наполнения списка возможных Command Arguments

Есть ли возможность для *vcxproj указать перечень возможных аргументов для запуска приложения?

298
Не отображается IDC в resorce.h файле

Не отображается IDC в resorce.h файле

Пишу программу на winApi, но когда перетаскиваю например из Toolbox Button eё IDC не отображается в resorceh файле

326
Нужна помощь с заполнение StringGrid

Нужна помощь с заполнение StringGrid

В оконном приложении билдера нужно чтобы при нажатии на определенную ячейку StringGrid'a он заполнялся заранее заданным символомОчень нужно

329