Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/88: Рейтинг темы: голосов - 88, средняя оценка - 4.58
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5

typedef и указатель на функцию

26.12.2012, 19:18. Показов 18698. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожлауйста с пониманем одного момента...

Так вот, есть оператор typedef.Он насколько я понял, обьявляет синоним.Напрмер:
C++
1
2
typedef int my;
my up;
То есть my==int, и мы создали переменную типа int.Это понятно.

Далее, у нас есть прототип функции void func(int*,int*), указателем на эту функцию, как я понимаю, будет void (*func)(int*,int*).

Так вот, вопрос - как запихнуть указатель на функцию в typedef, чтобы потом я мог обьявляь переменные с типом указатель на функцию с коротким именем.
В книге есть пример:
C++
1
2
typedef void(*func)(int*,int*);
func p1;
Но я не понимаю этот пример - мы же в typedef запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.

Вообщем, вопросов очень много касательно этой темы.Если можно, обьсните подробно данную тему.Заранее благодарю
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2012, 19:18
Ответы с готовыми решениями:

Записать указатель на функцию, не используя typedef
Имеется переменная - указатель на функцию fptr. Написать эту же переменную fptr, не используя typedef'ы /* Указатель на функцию void...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Указатель на шаблон класса через typedef
Здравствуйте. Возникла следующая проблема: захотел определить указатель на класс с template при помощи typedef, но вываливает ошибку: ...

16
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 19:31
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Но я не понимаю этот пример - мы же в typedef запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.
Мы запихнули идентификатор func.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 19:33
Я тоже часто теряюсь от такого синтаксиса
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
typedef void(*func)(int*,int*);
тут как бы
Code
1
func  ==  void xxx (int*,int*);
1
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
26.12.2012, 19:37  [ТС]
go, а почему тогда нельзя писать
C++
1
typedef void(*)(int*,int*) func;
Добавлено через 3 минуты
Avazart, поподробнее пожалуйста расскажите про ваш пример
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 19:37
А кто его знает, такую нелогичность - наверное так было проще реализовать.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 19:39
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, а почему тогда нельзя писать
Потому, что typedef это не простая подстановка. Почитайте про синтаксис, чтобы не путаться. Не путайте с define.
1
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
26.12.2012, 19:41
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, а почему тогда нельзя писать
C++
1
typedef void(*)(int*,int*) func;
А почему нельзя писать так?
C++
1
void (*)(int*,int*) func;
Или так:
C++
1
void ()(int*,int*) func;
Здесь проблема не в typedef, а в синтаксисе объявления указателя на функцию, с которым вам придется мирится.

Запомните главное правило - синтаксис typedef точно так же, как и синтаксис обычного объявления переменной без typedef'а.
4
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 19:55
ZaMaZaN4iK, http://msdn.microsoft.com/ru-r... sfztk.aspx почитай.

Цитата Сообщение от prazuber Посмотреть сообщение
Запомните главное правило - синтаксис typedef точно так же, как и синтаксис обычного объявления переменной без typedef'а.
Не правда. Вот смотрите. Я объявил
C++
1
2
3
4
typedef char* pChar;
 
const pChar a, b, c; // Замените это, как это поймет компилятор, 
// т.е. уберите typedef и сохраните смысл этого объявления :)
3
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
26.12.2012, 19:58  [ТС]
go, может я ошибаюсь, но должно получиться как-то так:
C++
1
const char *a,*b,*c;
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 20:00
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, может я ошибаюсь, но должно получиться как-то так:
Нет. Поэтому должны быть typedef'ы как для неконстантных вариантов указателей, так и для константных.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.12.2012, 20:03
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Так вот, есть оператор typedef.Он насколько я понял, обьявляет синоним.
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 20:05
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
Да нет не новый.. typeid проверьте...
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 20:07

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
typedef объявляет новый тип, как type на паскале.
Да ладно :)



Добавлено через 1 минуту
taras atavin, вот синтаксис
Code
1
typedef type-declaration synonym;
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.12.2012, 20:09
А как же тогда указательные типы, в том числе, на функции?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 20:14
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <typeinfo>
//----------------------------------
int main()
{
typedef int my;
 
std::cout <<  typeid(int).name() << std::endl;
std::cout <<  typeid(my).name() << std::endl;
 
return 0;
}
Добавлено через 31 секунду
Цитата Сообщение от taras atavin Посмотреть сообщение
А как же тогда указательные типы, в том числе, на функции?
А что с ними ?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.12.2012, 20:15
Так здесь то синоним.

Добавлено через 48 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
А что с ними ?
Ну в синтаксис декларации синонимов они ни как не лезут, хоть копром забивай.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.12.2012, 20:21
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну в синтаксис декларации синонимов они ни как не лезут, хоть копром забивай.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <typeinfo>
 
typedef void (my)(int);
 
void m(int);
 
int main()
{
    std::cout <<  typeid(m).name() << std::endl;
    std::cout <<  typeid(my).name() << std::endl;
    std::system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2012, 20:21
Помогаю со студенческими работами здесь

typedef (указатель на ф-ю) newtype, как сделать?
пытался затайпдефить указатель но чего-то никак( просто указатель работает, а как пытаюсь прикрутить typedef - ошибки. может в си нельзя...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Указатель на функцию, которая принимает в качестве параметра указатель на массив
я не понимаю. вроде делаю правильно, но выходит ошибка. есть функция. int foo(int *mas){}; cоздаю на нее указатель. int...

Передача умного указателя в функцию принимающую указатель на указатель
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru