![]() |
Указатель на функцию и его использование в С++
Есть функция1 и функция2. Предлагается создать указатель на функцию1, что из функции2 можно было бы вызывать ее(фунцию1) обращаясь к элементу массива(для разных параметров). Язык: С/С++.
Спасибо. |
Что-то как-то мутно сформулировано. Что нужно-то, вызов функции при обращении к элементу массива или я не понял?
|
что-то так
Код:
// функция 1 |
GOre01,
по ходу дела это мне и нужно. pfunc1 func_vect[10] только я глобальным сделаю. Цитата:
а вызывать уже func_vect[i-1]? |
Цитата:
|
То есть такая конструкция (массив) особого смысла не имеет, разве что забить указатели на разные функции.
|
да, конструкция имеет смысл, если мы хотим организовать доступ к различным функциям по индексу, например, выбор элемента меню.
гдето в программе: Код:
void cut(); |
Такие конструкции довольно широко применяются. Если мне не изменяет память, то message map в библиотеке WTL реализован как массив указателей на функции.
|
Не уверен но по моему message map в MFC организован также, хотя проверю, благо есть GO TO DEFINITION -)))
|
В MFC по другому
http://rsdn.ru/article/wtl/wtl-1.xml#ERPAE |
ситуация такая, решил замутить себе либу с функцией split (стандартные не предлагать :rolleyes: ).
сама функция: Код:
char ** _ARRAY; Код:
char ** db; не могу понять почему не работает. если функция возвращает return ** _ARRAY; то вообще ругается invalid conversion from `char' to `char**' компилятор g++ под винду. буду признателен всем за помощь :beer: зы: не строго судите, если не там разместил, имхо, как раз про указатели тема |
В код сильно не вчитывался, но зачем две звездочки в return ** _ARRAY;?
Указатель дважды разименовывается и получается char. Функция возвращает char** и _ARRAY имет тип char**, вот и возвращаться нужно прямо _ARRAY, т.е. return _ARRAY; и все. Вообще писать в глобальные перемынные, мягко говоря, не хорошо :) По поводу самой функции - не знаю ваши конкретные требования к этой функии, но не проще ли собрать указатели на начала строк (т.е. db[0] - будет указывать на первый символ исходной строки, db[1] на символ следующий за первым символом перевода строки) и заменить переводы строки нулями? |
видимо надо еще почитать про функции возвращающие значения. я считал, что переменная, в которую возвращается значение (и которую функция вовзращает) должна быть того же типа, что и возвращаемое значение. все заработало, спасибо :beer:
по поводу самой функции, честно сказать, я еще не очень догоняю сам С с его "привычками", мне ближе асм, но нынче на нем писать жутко долго. если db[0] это первый символ строки, то как мне обратиться ко второму? db[0][1]? в моем случае мне понятно, что db[0][0] это первый символ первой строки. зы: я на спектруме начинал, а там только асм, и я к нему привык так, что мне даже PCшный асм не очень понятен под винду :confused: |
Если db определено как
char **db; то db[0] - указатель на первый симовл первой строки (он имеет тип char*), db[0][0] - сам символ (тип char), и тд - db[0][1] - второй символ первой строки, db[1][0] - первый символ второй строки... Кстати, есть стандартная функция strtok, которая по сути выполняет то, что я описал. а я на спектруме хоть и начинал, но на асм так и не сподвигся :) |
Цитата:
мой вопрос исчерпан. спасибо за помощь! (с занесением) и спасибо за совет по поводу глобальных переменных, убрал ее в функцию. я ее изначально туда вынес, так как немного иным путем реализовал вначале, т.е. я потом и работал с массивом _ARRAY :) |
Часовой пояс GMT +4, время: 17:32. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.