На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Указатель на указатель
    Не могу сообразить, как реализовать на С следующую идею.
    Есть 2 указателя
     int *aa;
     WORD *ww;
    но они находятся в разных местах и не знают о друг друге ничего.
    В какой-то момент происходит
     aa = new int[100];
    В момент обработки необходимо получить содержимое указателя аа.

    Как я пытался решить эту задачу:
    void __fastcall TMainForm::Button1Click(TObject *Sender)
    {
    int *aa;
    WORD *ww;
    void *pp;

     pp = &aa;                   // ?????
     aa = new int[100];
     ww = (WORD *)pp;    // error
     ww[0] = 100;             // пишем куда-то не туда
     delete[] aa;
    }

    Как привельно сделать, чтобы ww работала с массивом аа?
      ExpandedWrap disabled
        <br>void main()<br>{<br>      int *aa;<br>      WORD *ww;<br>      void *pp;<br>      <br>      aa = new int[100];<br>      pp = aa;<br>      ww = (WORD *)pp;<br>      ww[0] = 100;<br>      delete[] aa;<br>}<br>
        В извращенном варианте моя задача решается так:

        {
        int *aa;
        WORD *ww;
        int pp;

         pp = (int)&aa;
         aa = new int[100];
         ww = (WORD *)((int *)pp)[0];    // ответ
         aa[0] = 200;
         ww[0] = 100;
         delete[] aa;
        }

        Может кто-нибудь знает как это записывается проще.
          2 lsv-X
          Если Вы хотите рассматривать один и тот же адрес как начало массива WORD и int, то можно делать так:
          ExpandedWrap disabled
            {<br>  int      *aa;<br>  WORD *ww;<br><br>  aa = new int[100];<br>  ww = (WORD *)aa;    // <-- ответ<br>  aa[0] = 200;<br>  ww[0] = 100;<br>  delete[] aa;<br>}

            2Prog2Michael: См. второй ответ...
              .alex
              См. второй ответ...
              Если Вы имеете ввиду ответ #1(Ваш), то там неоправдано используется void *pp.
              Если Вы имеете ввиду ответ #2, то там есть вопрос:
              Как привельно сделать, чтобы ww работала с массивом аа?
              на который я и попытался ответить.
                Цитата

                Если Вы имеете ввиду ответ #1(Ваш), то там неоправдано используется void *pp.

                Я имел ввиду мой ответ. Про void *pp, я согласен, что он тут не нужен, но человек спрашивал как сделать с этим pp, а что нужно и что не нужно должен решать, тот кто спрашивал...
                  [oftopic]
                  .alex
                  но человек спрашивал как сделать с этим pp
                  Во-первых. Неправда Ваша.
                  imho там вопрос
                  Цитата
                  Как привельно сделать, чтобы ww работала с массивом аа?

                  Во-вторых. Зачем автор вопроса поместил сообщение под номером #2?
                  [oftopic]
                    Заметьте, что вариант №1 и вариант №2 автора вопроса несколько отличаются, а я привёл ответ для заданного вопроса, переделав данную задачу не убирая ни каких переменных, а просто исправив ошибки...
                      [oftopic]
                      .alex
                      IMHO
                      1. Заголовок темы "Указатель на указатель" не соответствует вопросу.
                      2. Автор вопроса не читал "букварь" по Си, т.к. не имеет представления о тривиальном приведения типов.
                      3. Ваш ответ #1 содержит правильный вариант, но не дает "теоретического" обоснования. Возможно поэтому автор повторил вопрос, хотя может быть не прочитал Ваш ответ.
                      4. Я, ответом #3, уточнил постановку вопроса и привел достаточный код.
                      [/oftopic]
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0316 ]   [ 15 queries used ]   [ Generated: 23.05.24, 15:47 GMT ]