Передача аргументов в функцию

Тема в разделе "Общие вопросы по С и С++", создана пользователем DVetra, 11 июн 2008.

  1. DVetra

    DVetra New Member

    Регистрация:
    11 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Приветствую ! Начал, совсем недавно, осваивать С++ :unsure: Использую VS2005 и как опору "Полный справочник по С++" Шилдт'а. Без граблей, как видится, никогда необходится. Столкнулся с такой непоняткой, как мне видится и судя по брани компилятора, неправильно передаю тип переменной в аргумент функции. Фрагмент прилагается. В цикле вывожу описания переменных из массива "data_name" и сами значения переменных "data_mas". Такая конструкция работает :) . В процессе решил данную конструкцию записать в виде функции (закоментирована и описана внизу). Компилятор ругается на невозможность конвертации одного типа в другой. Не пойму в чем грабли. :blink: Опробовал разные варианты и с индексами и с указателями ... хех. Как говорится прошу помощь "зала" :unsure:


    Код (Text):
    void show_rez(const char *dm,double *ds,int j);
    ...
    double data_mas[8];      
    char const *data_name [8]={"Koef a = ","Koef b = ","Koef c = ",
    "Koef d = ","Koef n = ","Koef A = ",
    "Koef B = ","Koef m = "};
    ...          
    //show_rez(&data_menu[0],&data_mas[0],j); // грабли
    for(int j=0;j<8;j++)
    {
    cout <<data_menu[j]<<data_mas[j]<<"\n";
    //cout<<*(data_menu+j)<<*(data_mas+j)<<"\n"; // работает тоже
    }
    cout<<"\n";
    ...
    void show_rez(char *dm, double *ds,int j)
    {
    for(j=0;j<8;j++)
    ut<<*(dm+j)<<*(ds+j)<<"\n";
    cout<<"\n";
    }
     
  2. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Что-то я тут не понял. Не следует передавать в функцию переменную-счётчик. Правильно передать размер массива(ов). И что такое data_menu[]? И если в функцию надо передать массив строк, то писать следует не char *dm, а char **dm.
    Да и запись &data_menu[0] лично я считаю не очень красивой. Имхо, лучше писать просто data_menu.
    Вобщем задача мне видится следующим образом:
    Код (Text):
    void show_rez(char **dm, double *ds, int size);

    ...

    double data_mas[8];
    char const *data_name [8]={"Koef a = ", "Koef b = ", "Koef c = ", "Koef d = ",
    "Koef n = ", "Koef A = ", "Koef B = ", "Koef m = "};

    ...

    show_rez(data_name, data_mas, 8);

    ...

    void show_rez(char **dm, double *ds, int size)
    {
    for(int j = 0; j < size; j++)
    cout << *(dm + j) << *(ds + j) << endl;
    cout << endl;
    }
     
  3. DVetra

    DVetra New Member

    Регистрация:
    11 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Приветствую ! data_menu - это моя очепятка ;) Спасибо за совет. Завтра же опробую данный вариант, хотя задача решилась похожим вариантом. Тут видимо у меня не правильное представление о массиве строк и указателях на такие массивы. Вид указателя(?) **dm меня чуток смущяет, в плане недопонимания сущности :blink: . *dm указатель **dm указатель-указателя или разименование указателя ? :blink: Сорри, что отнимаю самое драгоценное, обещаю исправится :lol:
     
  4. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    char *dm - указатель на строку (массив символов). А char **dm - указатель на массив строк, или указатель на массив указателей на массивы символов.
     
Загрузка...
Похожие Темы - Передача аргументов функцию
  1. vladis222
    Ответов:
    2
    Просмотров:
    1.373
  2. Corexis
    Ответов:
    0
    Просмотров:
    66
  3. Shouldercannon
    Ответов:
    0
    Просмотров:
    485
  4. Shouldercannon
    Ответов:
    0
    Просмотров:
    385
  5. 123456789igor
    Ответов:
    0
    Просмотров:
    804

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