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

  • Автор темы Автор темы DVetra
  • Дата начала Дата начала
D

DVetra

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


Код:
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";
}
 
Что-то я тут не понял. Не следует передавать в функцию переменную-счётчик. Правильно передать размер массива(ов). И что такое 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[]? И если в функцию надо передать массив строк, то писать следует не 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 - это моя очепятка ;) Спасибо за совет. Завтра же опробую данный вариант, хотя задача решилась похожим вариантом. Тут видимо у меня не правильное представление о массиве строк и указателях на такие массивы. Вид указателя(?) **dm меня чуток смущяет, в плане недопонимания сущности :blink: . *dm указатель **dm указатель-указателя или разименование указателя ? :blink: Сорри, что отнимаю самое драгоценное, обещаю исправится :lol:
 
char *dm - указатель на строку (массив символов). А char **dm - указатель на массив строк, или указатель на массив указателей на массивы символов.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!