|
|
|
| Смотрите есть функция:
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;
// тоже самое, что и сверху
} |
| |
|
|
|
|
|
|
|
для: belkin
(17.08.2012 в 04:05)
| | Массив char *menu[] - это фактически двойной указатель char **, вам нужно просто передать этот указатель через параметр функции
void foo(char **tmp)
{
// Инициализация если tmp == NULL
// тоже самое, что и сверху
} |
| |
|
|
|
|
|
|
|
для: cheops
(17.08.2012 в 10:22)
| | Да, с этим разобрался, получилось.
Может звучит глупо, но нельзя допустим как в php? :)
Передать массив как-то так:
void foo(array("знач. 1", "знач 2.", "знач 3"))
{
// код
} |
И еще один вопрос, вот пытаюсь узнать какое количество элементо я передаю, через sizeof, но он мне возвращает 4б, то есть размер указателя.
А вот если я сделаю в ф-ции локальную переменную char* tmp[] = {"a1", "a2", "a3"}, тогда он возвратит 12б, то есть полностью сумму всех элементов, что и хотелось бы видеть.
Как узнать размер передаваемого массива? Кроме варианта с дополнительным параметром о размере. | |
|
|
|
|
|
|
|
для: Belkin
(17.08.2012 в 14:11)
| | PHP так организован, что передача параметров через ссылку у него на уровне языка. Да, можно, извернуться и в C++, но вам придется построить собственный набор классов... В общем, если вы работаете с char, а не со своим собственным классом строк - лучше передавать константный указатель или ссылку.
Внутри функции, воспользоваться sizeof уже не получится - придется передавать количество элементов в качестве параметра функции, именно, поэтому указатели не очень рекомендуются к работе. Лучше всего оформить массив в виде класса, который бы автоматически возвращал количество элементов в нем при помощи метода или открытого свойства. А еще лучше воспользоваться стандартным контейнером библиотеки STL. На уровне голого языка поддержка удобств очень слабая. | |
|
|
|
|
|
|
|
для: cheops
(17.08.2012 в 15:41)
| | Понял, спасибо. | |
|
|
|