Разбираю указатели на функции,и решил реализовать. Функция, сама по себе простенькая, подсчет количества слов в строке.
Но не работает именно указатель на ф-цию, судя из цитаты у меня все правильно,как мне кажеться.
Проблема конкретно в строке char(*kilsliv)(int);
Выдает error: invalid conversion from 'char*' to 'int' [-fpermissive]
Как исправить, и в чем проблема?Спасибо!
> double (*pfunc)( double );
В момент этого объявления указатель pfunc
представляет собой ничего более, как некоторый адрес во внутреннем представлении компьютера (4 байта в 32-бит операционной системе, 8 байт в 64-бит операционной системе). Это в точности тот же внутренний вид, который имеет, скажем, указатель на целочисленную переменную int*. Но этот указатель имеет свой строго определённый тип: указатель на функцию, принимающую один параметр типа double, и возвращающую значение типа double. Но вот на какую конкретно функцию указывает указатель, в точке его определения — не важно: значение указателя не определено. взято отсюда.
#include <iostream>
using namespace std;
int kilsliv(char*strq)
{
int q=0;
for(int i=0;i<20;i++)
{
if(strq[i]==' ')
q+=1;
}
return q+1;
}
int main()
{
setlocale(LC_ALL, "rus");
char str[20]="";
cin.getline(str,20);
char(*kilsliv)(int);
cout << str << endl;
cout<<"kilkist sliv ="<<kilsliv(str)<<endl;
return 0;
}
Вот тут:
char(*kilsliv)(int);
вы объявляете локальный указатель kilsliv
на функцию, которая принимает int
и возвращает char
. Более того это объявление перекрывает функцию из глобальной области видимости. Вот тут:
cout<<"kilkist sliv ="<<kilsliv(str)<<endl;
вы пытаетесь вызвать функцию по указателю м параметром char*
, хотя она принимает int
. Более того этот указатель ничем не был инициализирован. И если у вас даже получится вызвать функцию по этому указателю (например с флагом -fpermissive
скомпилировав), то скорее всего вы получите Segmentation fault
, так как указатель ведёт куда-то не туда.
Но можно создать указатель на функцию такую же, как kilsliv
и инициализировать его:
int(*f)(char*) = kilsliv;
Теперь при фызове f()
будет вызывать функция определенная как kilsliv
, так как это указатели и указывают они теперь на одну область памяти.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как составить UML диаграммы по написанному коду в Visual Studio 2015 Community Edition?
Помогите пожалуйста, суть задания нужно создать игру,угадай числоесли диапазон чисел начинающихся с 0 и 1 и пользователь должен угадать число...
Написал код по рандомному формированию массиваТеперь хочу что бы он стал двумерным
здравствуйте, решил написать небольшую обертку над си-шными сокетами, подскажите почему вылетает sigpipe в функции write?