Погода: -12°C
  • Привет всем!
    Вопрос конечно очень прост, но просто сам чего-то запутался.
    Вот код:
    void Test(int *t)
    {
    *t=100;
    }
    вызов функции
    int t;
    Test(&t);
    после вызова переменной t присваивается 100.

    а если у меня не переменная, а указатель на Int, т.е.
    int *t;
    то как мне переделать функцию, что бы t присваивалось 100.

    Пробовал так:
    void Test(int *t)
    {
    t=100;
    }

    int *t;
    Test(t);
    внутри функции переменной t присваивается значение 100, а вот после вызова функции, t не изменяется.
    Как быть?

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

    А вот в вызове нужно кое-что поменять:
    int *t;
    t = (int*)malloc(sizeof(int));
    Test(t);
    /* Что-то делаем с t */
    free(t);

    My JID is ktak@jabber.sibnet.ru
    Мой городок

  • Или так:

    int t;
    int* ptr;

    ptr=&t;

    test(ptr);

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

    Землю - крестьянам, фазу - электрикам!!

  • Спасибо, с этим я разобрался. Но у меня возник еще один вопрос: Как мне возвратить указатель на область памяти, которая выделется внутри функции. Т.е. например

    int *Test()
    {
    return (int *)malloc(1*sizeof(int));
    }
    Тут все просто, но как быть если ине надо возвратить указатель на 2 переменные. Я имею ввиду, что в функции выделяется память под две переменные:
    int *Test(int *temp)
    {
    t=(int *)malloc(1*sizeof(int));
    return (int *)malloc(1*sizeof(int));
    }
    вот вызов:
    int *temp,*t;
    t=Test(temp);
    В данном случае, t будет указывать на область памяти, а вот temp будет пустым. Как мне переменной temp присвоить указатель на память, выделяемую внутри функции?

  • А здесь надо или использовать in/out параметры, или struct

    in/out:
    --------
    void Test(int **t, int **temp)
    {
    *t=(int *)malloc(1*sizeof(int));
    *temp=(int *)malloc(1*sizeof(int));
    return;
    }

    вот вызов:
    int *temp,*t;
    Test(&t, &temp);

    struct:
    ---------

    struct TwoPointers {
    int *t;
    int *temp;
    }

    TwoPointers *Test(void)
    {
    TwoPointers *twoPointersObject = (TwoPointers*)malloc(1*sizeof(TwoPointers ));
    twoPointersObject->t=(int *)malloc(1*sizeof(int));
    twoPointersObject->temp=(int *)malloc(1*sizeof(int));
    }

    вот вызов:

    TwoPointers *tp = Test();

  • Можно проще - передать 2 параметра в вызываемую функцию, указатель на указатель:

    void Test(int **temp1, int **temp2)
    {
    *temp1=(int *)malloc(1*sizeof(int));
    *temp2=(int *)malloc(1*sizeof(int));
    return;
    }

    вызов:
    int *temp1, *temp2;
    Test(&temp1, &temp2);

    по-моему так. в плюсах можно использовать ссылочный тип &, если надо, могу рассказать

  • Мдааааа...

    не пробовал задавать вопросы в нормальных местах - RSDN.ru ? fido7.RU.Visual.CPP ?
    fido7.su.c_cpp ?

    Джордано Бруно секс-форума. =) Забанен за стихотворение.

  • В ответ на: Можно проще - передать 2 параметра в вызываемую функцию, указатель на указатель:

    void Test(int **temp1, int **temp2)
    {
    *temp1=(int *)malloc(1*sizeof(int));
    *temp2=(int *)malloc(1*sizeof(int));
    return;
    }

    вызов:
    int *temp1, *temp2;
    Test(&temp1, &temp2);

    по-моему так. в плюсах можно использовать ссылочный тип &, если надо, могу рассказать
    Именно так я и сделал. Действительно тип-ссылка в C++ очень удобен(жалко его в обычном C нет), хотя и так не плохо получилось.

  • В ответ на: Мдааааа...

    не пробовал задавать вопросы в нормальных местах - RSDN.ru ? fido7.RU.Visual.CPP ?
    fido7.su.c_cpp ?
    А чем тебе это место не нравиться? На самом деле вопрос был элементарен, но тогда я сам чего-то запутался. Да мне и здесь номрмально ответили :спок: Так что Форуму на НГС :respect:

Записей на странице:

Перейти в форум

Модератор: