Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ C и С++ FAQ _ Как возвратить указатель на массив?

Автор: Acorn 21:03:2007, 18:36

В условии задачи: "Функция должна вернуть указатель на массив". Не знаю как, не получается sad.gif

Автор: zubr 22:03:2007, 05:09

int MyArray[100];

int* MyFunc()
{
     //Какой то код
    return MyArray;
}

Автор: Acorn 22:03:2007, 11:40

Не очень понятно, как получить этот указатель. Вот мой код (который не работает):

#include <iostream>
using namespace std;

int* fSimple(int intMax)
{
    int Array[100];
    Array[0] = 2;
    int intCount = 1;
    bool bGood;
    for (int i = 3; i < intMax; i++)
    {
        bGood = true;
        for (int j = 1; j < intCount; j++)
            if (i%Array[j] == 0) bGood = false;
        if (bGood) Array[++intCount] = i;    
    }
    Array[0] = intCount;
    return Array;
}


int main()
{
    int *p = fSimple(100);
    for (int i = 1; i < p[0]; i++)
        cout << p[i] << " ";
    return 0;
}


P.S. просьба учесть, что эту функцию мне надо в отдельную библиотеку поместить.

Автор: European 22:03:2007, 11:47

Ты возвращаешь указатель на локальный массив, что делать нельзя, т.к. область видимости данного массива - функция fSimple. С учетом того, что fSimple должна быть в библиотеке и возвращать указатель на массив, то Array нужно объявить как static

Автор: Acorn 22:03:2007, 11:57

Всем спасибо за помощь ламеру.

Автор: Acorn 25:03:2007, 17:17

Вопрос #2, я динамически создаю структуры в функции, как сделать, чтобы они були доступны в теле программы? На static ругается.

Автор: European 26:03:2007, 07:23

Если не стоит задача возвращать указатель из функции, то лучше создать указатель на структуру вне функции, передать его в функцию, создать структуру, инициализировав переданный указатель

Автор: -=ФИЛОСОФ=- 28:03:2007, 17:52

Можно ещё так:

void main()
{
int arr[100];
int addr;
asm{
      mov ax,offset arr
      mov addr,ax
}
}

в переменную addr помещается адрес массива arr.

Автор: European 29:03:2007, 06:25

Для: -=ФИЛОСОФ=-
Получить адрес массива и вернуть валидный указатель на массив из функции это не одно и тоже

Форум Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)