Форум программистов, компьютерный форум CyberForum.ru

Возвращение массива из функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Из цельсия в фаренгейты http://www.cyberforum.ru/cpp-beginners/thread48036.html
у меня есть код int main() { double f=70; double c=0; cout << "C | F"; while(c!=50){
C++ Функция getline(cin,slovo) Программисты! Подскажите, если не трудно, в строке: getline(cin, slovo); Какую роль играет cin ? slovo - это переменная в которую я ввожу текст, а cin? Или это по стандарту нужно писать cin.... http://www.cyberforum.ru/cpp-beginners/thread48024.html
Проблемка с генерацией случайных чисел C++
Доброго дня, уважаемые форумчане Имею нижеследующий код for(int i_o = 0; i_o < init_arr; i_o++) //for(int i_o = 0; i_o < 1; i_o++) { for(int i=0; i<n; i++) {sel_arr = true;} f_rep = 0; s_rep = 0; for(int i=0; i<n; i+=2) {
Visual Studio 2008 создание самомтоятельного exe файла C++
Добрый день. Может ли кто-нибудь пошагово объяснить как из кучи совершенно ненужных пользователям файлов проекта и другой "мурни" сделать один exeшник ну и, возможно dll к нему? Программа с оконным интерфейсом windows с кучей подключаемых библиотек. Ну или на крайняк дайте ссылку на описание процесса. Заранее спасибо.
C++ Отрисовка линии http://www.cyberforum.ru/cpp-beginners/thread47950.html
Всем привет. вот что накатал: #include <cstdlib> #include <iostream> using namespace std; int drawline (int x0,int y0,int x1,int y1){ int dx=x1-x0; int dy=y1-y0;
C++ намалювати построчно блок схему С++ код програми № 1: #include<iostream.h> #include<conio.h> #include<stdlib.h> int Sum(int n, int m){ int min=0, sum=0; for(int i=0;i<m;i++) if(n<n) min=i; подробнее

Показать сообщение отдельно
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
26.08.2009, 21:48     Возвращение массива из функции
не морочьте человеку голову.
все зависит от того, что предполагается делать с массивом в этой ф-ии. это нужно четко понимать.
самый надежный способ - это как делает майкрософт в своем api: память выделается в клиенте, и в ф-ю передается адрес этой памяти (первого элемента массива), максимальное количество элеметнов, на которое массив рассчитан, и указатель на счетчик, который вернет число действительных элементов массива. ф-я возвращает булево значение, означающее "получилось-неполучилось". как например:

C++
1
2
3
4
5
6
7
BOOL ReadFile(
  HANDLE hFile,                // handle to file
  LPVOID lpBuffer,             // data buffer
  DWORD nNumberOfBytesToRead,  // number of bytes to read
  LPDWORD lpNumberOfBytesRead, // number of bytes read
  LPOVERLAPPED lpOverlapped    // overlapped buffer
);
первый и последний параметр игнорируйте. остальное подходит как иллюстрация к случаю.

как альтернативу можно использовать vector (что я чаще всего и делаю). клиент создает вектор, резервирует памяти достаточно для предположительного количества элементов (иначе будут затраты ресурсов на выделение памяти под буфер вектора) и передает указатель на него в ф-ю. как:

C++
1
2
3
bool func (std::vector<int> *pDataVect){
...
}
обращение к ф-ии:

C++
1
2
3
std::vector<int> dataVect;
dataVect.reserve (ESTIMATED_SIZE);
bool ok = func (&dataVect);
если функция - в dll, только первый интерфейс подходит. второй может при определенных обстоятельствах создать проблемы, которые долго не поймете откуда происходят
 
Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru