Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как передать char массив в ф-цию!
 
 автор: belkin   (17.08.2012 в 04:05)   письмо автору
 
 

Смотрите есть функция:

void foo()
{
    char* menu[] = {"знач 1""знач 2""знач 3"};

    // ла-ла-ла, какой-то код и дальше я обрабатываю этот массив

    switch(menu)
    {
        case 0: cout << menu[0]; // знач 1
            break;
        case 1: cout << menu[1]; // знач 2
            break;
        // и т.д.
    }
}


а как сделать так, чтобы этот массив инициализировать как аргументы, то есть что-то такое:
(понимаю, что не работает, просто саму идею показываю. Хотелось бы, чтобы эти пункты можно было как аргументы передать..

void foo(char tmp[] = {"знач 1""знач 2""знач 3"})
{
    char* menu[] = tmp;

    // тоже самое, что и сверху
}

  Ответить  
 
 автор: cheops   (17.08.2012 в 10:22)   письмо автору
 
   для: belkin   (17.08.2012 в 04:05)
 

Массив char *menu[] - это фактически двойной указатель char **, вам нужно просто передать этот указатель через параметр функции
void foo(char **tmp)
{
  // Инициализация если tmp == NULL
  // тоже самое, что и сверху
}

  Ответить  
 
 автор: Belkin   (17.08.2012 в 14:11)   письмо автору
 
   для: cheops   (17.08.2012 в 10:22)
 

Да, с этим разобрался, получилось.

Может звучит глупо, но нельзя допустим как в php? :)

Передать массив как-то так:

void foo(array("знач. 1""знач 2.""знач 3"))
{
    // код
}


И еще один вопрос, вот пытаюсь узнать какое количество элементо я передаю, через sizeof, но он мне возвращает 4б, то есть размер указателя.

А вот если я сделаю в ф-ции локальную переменную char* tmp[] = {"a1", "a2", "a3"}, тогда он возвратит 12б, то есть полностью сумму всех элементов, что и хотелось бы видеть.

Как узнать размер передаваемого массива? Кроме варианта с дополнительным параметром о размере.

  Ответить  
 
 автор: cheops   (17.08.2012 в 15:41)   письмо автору
 
   для: Belkin   (17.08.2012 в 14:11)
 

PHP так организован, что передача параметров через ссылку у него на уровне языка. Да, можно, извернуться и в C++, но вам придется построить собственный набор классов... В общем, если вы работаете с char, а не со своим собственным классом строк - лучше передавать константный указатель или ссылку.

Внутри функции, воспользоваться sizeof уже не получится - придется передавать количество элементов в качестве параметра функции, именно, поэтому указатели не очень рекомендуются к работе. Лучше всего оформить массив в виде класса, который бы автоматически возвращал количество элементов в нем при помощи метода или открытого свойства. А еще лучше воспользоваться стандартным контейнером библиотеки STL. На уровне голого языка поддержка удобств очень слабая.

  Ответить  
 
 автор: Belkin   (17.08.2012 в 17:53)   письмо автору
 
   для: cheops   (17.08.2012 в 15:41)
 

Понял, спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования