![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как правильно передать несколько данных в программу из функции? |
|
C/C++ - Как правильно передать несколько данных в программу из функции?
|
Старожил Сообщения: 251 |
В функции outArray формирую массив, а затем адрес первого элемента массива вместе с количеством строк и столбцов массива передаю в программу:
#include <iostream> #include <string> #include <tchar.h> using namespace std; float** outArray() { float nrow = 3.0; float ncol = 5.0; float flArray[][5] = { { 1.1, 1.2, 1.3, 1.4, 1.5 }, { 2.1, 2.2, 2.3, 2.4, 2.5 }, { 3.1, 3.2, 3.3, 3.4, 3.5 } }; float* out[3]; out[0] = &nrow; out[1] = &ncol; out[2] = &flArray[0][0]; return out; } int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Russian"); float** out2 = outArray(); int nrow = (int) (*out2[0]); int ncol = (int) (*out2[1]); float** fla = &out2[2]; for (int i = 0; i < nrow; i++) { for (int j = 0; j < ncol; j++) { cout << fla[i*ncol + j] << '\t'; // Здесь ошибка } cout << endl; } cin.get(); return(EXIT_SUCCESS); } - как в моей программе, зная адрес первого элемента массива, количество строк и столбцов, вывести значения массива? - с помощью каких типов C++ удобно передавать (возвращать) данные различных типов? Например, в моем случае передать массив float и количество строк и столбцов int. |
|
Отправлено: 15:17, 30-06-2015 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Цитата tumanovalex:
#include <iostream> auto outArray() -> float(*)[5] { static float flArray[3][5] = { { 1.1, 1.2, 1.3, 1.4, 1.5 }, { 2.1, 2.2, 2.3, 2.4, 2.5 }, { 3.1, 3.2, 3.3, 3.4, 3.5 } }; return flArray; } int main() { auto array = outArray(); for (std::size_t i = 0; i < 3; ++i) { for (std::size_t j = 0; j < 5; ++j) std::cout << array[i][j] << " "; std::cout << "\n"; } } Цитата tumanovalex:
#include <iostream> #include <array> const std::array<std::array<float, 5>, 3>& outArray() { static const std::array<std::array<float, 5>, 3> flArray = { 1.1, 1.2, 1.3, 1.4, 1.5 , 2.1, 2.2, 2.3, 2.4, 2.5 , 3.1, 3.2, 3.3, 3.4, 3.5 }; return flArray; } int main() { auto &array = outArray(); for (auto &ar : array) { for (float fl : ar) std::cout << fl << " "; std::cout << "\n"; } } |
||
Отправлено: 17:30, 30-06-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 251
|
Профиль | Отправить PM | Цитировать Хотелось бы все-таки разобраться с моим кодом. Переделал программу так, чтобы в основной программе правильно определялись адреса:
#include <Windows.h> #include <iostream> #include <string> #include <tchar.h> using namespace std; float** outArray() { float nrow = 3.0; float ncol = 5.0; float flArray[][5] = { { 1.1f, 1.2f, 1.3f, 1.4f, 1.5f }, { 2.1f, 2.2f, 2.3f, 2.4f, 2.5f }, { 3.1f, 3.2f, 3.3f, 3.4f, 3.5f } }; float* out[3]; out[0] = &flArray[0][0]; out[1] = &nrow; out[2] = &ncol; cout << &flArray << endl; cout << out[0] << endl; cout << *out[0] << endl; cout << &flArray[0][0] << endl; cout << &flArray[0][1] << endl; cout << &flArray[0][1] - &flArray[0][0] << endl; cout << *(&flArray[0][0] + 1) << endl; cout << "---------------------" << endl; return out; } int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Russian"); float** out2 = outArray(); int nrow = (int)(*out2[1]); int ncol = (int)(*out2[2]); int delta = 1; float* fla = out2[0]; cout << fla << endl; cout << fla + delta << endl; cout << *(fla + delta) << endl; // не совпадает с *(&flArray[0][0] + 1) for (int i = 0; i < nrow; i++) { for (int j = 0; j < ncol; j++) { cout << *(fla + i*ncol + j) << '\t'; } cout << endl; } cin.get(); return(EXIT_SUCCESS); } |
Отправлено: 12:13, 01-07-2015 | #3 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать tumanovalex, твоя функция возвращает массив указателей, которые указывают на адреса локальных не статических переменных. После выхода с функции они удаляются. Обращение к этим переменным каким либо образом (через обращения к значению указателя) не определено.
|
Отправлено: 17:45, 01-07-2015 | #4 |
Старожил Сообщения: 251
|
Профиль | Отправить PM | Цитировать Понятно. Спасибо за ответы.
|
|
Отправлено: 22:36, 01-07-2015 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - VBScript написать функции считывания таблицы данных из текстового файла | evgenmsch@vk | Скриптовые языки администрирования Windows | 3 | 18-02-2014 07:20 | |
C/C++ - Как передать функцию в качестве аргумента другой функции? | crashtuak | Программирование и базы данных | 6 | 17-09-2012 12:51 | |
CMD/BAT - [решено] как правильно передать переменные подпрограмме из цикла for | akrav | Скриптовые языки администрирования Windows | 4 | 07-01-2008 17:51 | |
Как передать вызов из адресной строки браузера? | zrad | Программное обеспечение Windows | 6 | 20-12-2007 15:53 | |
Как переменные из одного скрипта передать ? | Kudryavcev Dmitry | Вебмастеру | 4 | 04-10-2003 03:10 |
|