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


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";
}
shisik
Что-то я тут не понял. Не следует передавать в функцию переменную-счётчик. Правильно передать размер массива(ов). И что такое data_menu[]? И если в функцию надо передать массив строк, то писать следует не char *dm, а char **dm.
Да и запись &data_menu[0] лично я считаю не очень красивой. Имхо, лучше писать просто data_menu.
Вобщем задача мне видится следующим образом:
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;
}
DVetra
Цитата(shisik @ 11:06:2008, 19:48 ) *
Что-то я тут не понял. Не следует передавать в функцию переменную-счётчик. Правильно передать размер массива(ов). И что такое data_menu[]? И если в функцию надо передать массив строк, то писать следует не char *dm, а char **dm.
Да и запись &data_menu[0] лично я считаю не очень красивой. Имхо, лучше писать просто data_menu.
Вобщем задача мне видится следующим образом:
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;
}

Приветствую ! data_menu - это моя очепятка unsure.gif Спасибо за совет. Завтра же опробую данный вариант, хотя задача решилась похожим вариантом. Тут видимо у меня не правильное представление о массиве строк и указателях на такие массивы. Вид указателя(?) **dm меня чуток смущяет, в плане недопонимания сущности blink.gif . *dm указатель **dm указатель-указателя или разименование указателя ? blink.gif Сорри, что отнимаю самое драгоценное, обещаю исправится rolleyes.gif
shisik
char *dm - указатель на строку (массив символов). А char **dm - указатель на массив строк, или указатель на массив указателей на массивы символов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.