Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Извлечение значений массива из функции 
:(
    Опции темы
Proletariy
  Дата 19.2.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Здравствуйте.

Вопрос следующий: в теле функции объявляется массив. Как после выполнения функции, в дальнейшем в теле программы использовать полученные значения элементов массива.

В упрощенном виде выглядит так:

#include "stdafx.h"

float m_ostovnoymassiv[200]; //Основной массив для дальнейшей работы с ним

void myfunction(..................//параметры функции)
{

float m_vremenniymassiv[200];//Временный массив заполняется в процессе работы функции

............
//Заполнение массива значениями
............

}

Т.е. после завершения работы функции д.б. m_ostovnoymassiv[i]==m_vremenniymassiv[i];



С утра сегоденя  smile  ничего не получилось. Не могу понять  smile  как с помощью указателей или по другому это сделать.



Заранее огромное спасибо за ответы. 
PM MAIL   Вверх
Fazil6
Дата 19.2.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



Код

#include "stdafx.h"

#define MASSIV_SIZE 200


float m_ostovnoymassiv[MASSIV_SIZE]; //Основной массив для дальнейшей работы с ним

void myfunction(float (&m_vremenniymassiv)[MASSIV_SIZE])
{
............
//Заполнение массива значениями
............

}

myfunction(m_ostovnoymassiv); // внутри функции m_ostovnoymassiv заполнится значениями


PM MAIL   Вверх
EnergoHokum
Дата 19.2.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



ВотЪ ещё что-то похожее:

Код

void myfunction(float* pArray)
{
    // create array
    memcpy((float*) (&m_ostovnoymassiv[0]),(float*) (&created_array[0]),MASSIV_SIZE);
}

PM MAIL ICQ   Вверх
jorikdima
Дата 19.2.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



массивы созданные внутри функции хранятся в стеке и по окончанию функция, память отведенная для них считается пустой.

правильно так.

Код


int* first_arr;   //не массив а указатель


void main()
{
    first_arr = func();

    //работаем с указателем, зная что он указывает на массив длинной 10

   //не забываем очистить память

  delete first_arr;
}


int* func()
{
    int* secont_arr = new int[10];
    //работаемс массивом second_arr
    
    return second_arr;
}



либо так:
Код


int first_arr[10];   //не массив а указатель


void main()
{
    func(first_arr);
   //все. теперь в массиве first_arr все как во временном массиве функции

}


void func(int* arr)
{
    int secont_arr[10];
    //работаемс массивом second_arr
    
    memcpy(arr, second_arr,10);
}


PM MAIL   Вверх
Fazil6
Дата 19.2.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



Цитата(jorikdima @  19.2.2008,  13:47 Найти цитируемый пост)
правильно так.

да уж... Не советую так делать никогда, не говоря уже об ошибках
PM MAIL   Вверх
Proletariy
  Дата 19.2.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Пока я разбирался уже целая ветка создалась))
Большое спасибо всем за ответы!

Fazil6  smile Крепко жму Вашу руку! Все прекрасно получилось. Наконецто... smile 

PM MAIL   Вверх
jorikdima
Дата 19.2.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



Цитата(Fazil6 @ 19.2.2008,  15:09)
Цитата(jorikdima @  19.2.2008,  13:47 Найти цитируемый пост)
правильно так.

да уж... Не советую так делать никогда, не говоря уже об ошибках

какой из вариантов не понравился? можно коментарии что не так и почему не советуете.
PM MAIL   Вверх
Fazil6
Дата 19.2.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



выделение в одном месте, удаление в другом... delete не соответствует new. Код вызывающий эту функцию
Код

void func(int* arr)
{
    int secont_arr[10];
    //работаемс массивом second_arr
    
    memcpy(arr, second_arr,10);

}

зависит от ее внутренней реализации и это очень плохо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.