На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Передача двумерных массивов в функцию
    Цитата Ilar @
    я не С++ Builder использую

    не принципиально для данного вопроса, синтаксис тот же, С++
    Цитата Ilar @
    Здесь же вопрос как лучше передать такой массив.

    как передать именно такой статический массив там есть решение(9й,12й пост)
    но это при определенных условиях
    ExpandedWrap disabled
      #include <iostream>
      typedef int arrayint5x5_t [5][5];
      void foo(arrayint5x5_t  arr)
      {
        for(int i=0;i<5;++i)
          for(int ii=0;ii<5;++ii)
          std::cout<<arr[i][ii]<<"  ";
      }
       
      int main()
      {
        int ar[5][5];
        for(int i=0;i<5;++i)
          for(int ii=0;ii<5;++ii)
            ar[i][ii]=i*ii+ii;
        foo(ar);
      }

    там есть еще варианты, посмотри ;)
      Цитата Ilar @
      Здесь же вопрос как лучше передать такой массив.

      Если размерность фиксированная (size1 * size2), то так

      ExpandedWrap disabled
        f(Type (&arr)[size2][size1]);

      или так

      ExpandedWrap disabled
        f(Type (*arr)[size2][size1]);
        Здраствуйте. Подскажите пожалуйста, как передать массив строк, количество которых n? Задал я его динамически таким способом:
        ExpandedWrap disabled
             char **str;
             str=(char**)calloc(n,sizeof(char*));
             for(int i=0;i<n;i++)
              str[i]=(char*)calloc(MAX_LEN,sizeof(char));


        А передать его в функцию никак не могу..((
        Когда пишу вот так:
        ExpandedWrap disabled
          ExcStr(str,n);

        то Builder ругается:
        E2034 Cannot convert 'char * *' to 'char ( *)[10240]'
        E2342 Type mismatch in parameter 'str' (wanted 'char ( *)[10240]', got 'char * *')

        З.Ы. Эту тему читал полностью, но как передать вот такое, как у меня, к сожалению не понял :(
        Сообщение отредактировано: Tolias -
          Странный вопрос - компилятор же тебе прямо написал, как переделать:
          ... ExcStr(char** str, int n);
            Пожалуй самый казуальный способ передачи массива в функцию - это применение структуры :P
            ExpandedWrap disabled
              using namespace std;
              struct MyStruct{
                float arr[2][2];
              };
              void AnyFunc(MyStruct );
              int main()
              {
                MyStruct a;
                a.arr[0][0]=1.1;
                a.arr[0][1]=2.2;
                a.arr[1][0]=3.3;
                a.arr[1][1]=4.4;
                AnyFunc(a);
               
                system("pause");
                return 0;
              }
              void AnyFunc(MyStruct a)
              {
                for(int i=0; i<2; i++)
                  for(int j=0; j<2; j++)
                    cout<<a.arr[i][j]<<" : ";
                  cout<<endl;
              }

            Никаких указателей, все четко и просто...
              Не самый, но вполне достаточно. Далеко не всегда в цели входит передача копии массива постоянного размера.
                Цитата Qraizer @
                Далеко не всегда в цели входит передача копии массива постоянного размера.

                Это как это далеко не всегда ? я не в том смысле что наехать, я спрашиваю, обычно передают по:
                const MyStruct& perem
                Просот есл иамперсанд убрать бред получица полный, этож будет весь массив скопирован во внутрений объект, я просто не видел случаев на своей практике, когда бы это понадобилось...
                  KILLER, я чёт не понял. Ты согласился или споришь? :unsure:
                    Цитата Qraizer @
                    KILLER, я чёт не понял. Ты согласился или споришь?

                    Я спрашиваю, нафига передавать структуру с массивом по значению а не поссылке ??
                      Значит согласился. :)
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0348 ]   [ 15 queries used ]   [ Generated: 17.05.24, 03:32 GMT ]