Как возвратить указатель на массив?

Тема в разделе "C и С++ FAQ", создана пользователем acorn, 21 мар 2007.

  1. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    В условии задачи: "Функция должна вернуть указатель на массив". Не знаю как, не получается :D
     
  2. zubr

    zubr Гость

    Код (Text):
    int MyArray[100];

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

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Не очень понятно, как получить этот указатель. Вот мой код (который не работает):
    Код (Text):
    #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. просьба учесть, что эту функцию мне надо в отдельную библиотеку поместить.
     
  4. European

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

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Всем спасибо за помощь ламеру.
     
  6. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Вопрос #2, я динамически создаю структуры в функции, как сделать, чтобы они були доступны в теле программы? На static ругается.
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Если не стоит задача возвращать указатель из функции, то лучше создать указатель на структуру вне функции, передать его в функцию, создать структуру, инициализировав переданный указатель
     
  8. -=

    -= Гость

    Можно ещё так:
    Код (Text):
    void main()
    {
    int arr[100];
    int addr;
    asm{
    mov ax,offset arr
    mov addr,ax
    }
    }
    в переменную addr помещается адрес массива arr.
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: -=ФИЛОСОФ=-
    Получить адрес массива и вернуть валидный указатель на массив из функции это не одно и тоже
     
Загрузка...

Поделиться этой страницей