Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
#1

tydedef - C++

02.07.2013, 18:42. Просмотров 298. Ответов 6
Метки нет (Все метки)

typedef char* (*Func)();
объясните что значит.
глупо думать что (*Func)() синоним char*..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,877
Записей в блоге: 3
Завершенные тесты: 1
02.07.2013, 18:53 #2
имя типа указатель на функцию
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
02.07.2013, 18:55 #3
C++
1
char* (*)()
Указатель на функцию с сигнатурой char*(void).
1
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
02.07.2013, 19:10  [ТС] #4
Цитата Сообщение от Герц Посмотреть сообщение
C++
1
char* (*)()
Указатель на функцию с сигнатурой char*(void).
(*x) синоним char(*x)()?
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
02.07.2013, 19:17 #5
Func - это имя типа, "указатель на функцию, возвращающую char* ". При чём тут синоним?
0
iv-a
15 / 15 / 0
Регистрация: 25.06.2013
Сообщений: 63
02.07.2013, 19:33 #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
"указатель на функцию, возвращающую char*
и эта функция ничего не принимает. void

Добавлено через 51 секунду
правильно?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
02.07.2013, 19:38 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
char ch[]={'a','b','c','\0'};
 
char* foo(){
return &ch[0];
}
 
int main()
{
typedef int massOfDec[3];
massOfDec mass={1,2,3};//аналогично объявлению int mass[3]={1,2,3};
cout<<mass[2]<<endl;//3
//то есть "аргументом" typedef является объявление, в нашем примере: int massOfDec[3];
//при этом имя в объявлении используется как тип (который был бы объявлен без typedef) для дальнейших объявлении!
//поэтому интерпритация та же, что и в обычном обявлении: изнутри (от имени) вправо, а затем влево:
typedef char* (*Func)();//скобки, чтобы не получить функцию возвращающую char**
//typedef - обявляется: изнутри - имя Func, как указатель "(* имя)", на: вправо - функцию "()", возвращающую: влево от изнутри)) - указатель на символ "char* "
Func ptr_To_Fun;//обявлен указатель типа Func, то есть того же типа которым был бы Func будучи объявленным без typedef
ptr_To_Fun=foo;//foo - возвращает тот же тип (имена функций и масcивов преобразуются в указатели) 
cout<<ptr_To_Fun<<endl;//адрес: значение указателя на foo()
cout<<ptr_To_Fun()<<endl;//abc
std::cout<<std::endl;
    system("pause");
    return 0;
}
0
02.07.2013, 19:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru