Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Извлечение значений массива из функции


Автор: Proletariy 19.2.2008, 13:58
Здравствуйте.

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

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

#include "stdafx.h"

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

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

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

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

}

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



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



Заранее огромное спасибо за ответы. 

Автор: Fazil6 19.2.2008, 14:10
Код

#include "stdafx.h"

#define MASSIV_SIZE 200


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

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

}

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


Автор: EnergoHokum 19.2.2008, 14:47
ВотЪ ещё что-то похожее:

Код

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

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

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

Код


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);
}


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

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

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

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

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

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

какой из вариантов не понравился? можно коментарии что не так и почему не советуете.

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

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

}

зависит от ее внутренней реализации и это очень плохо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)